我正在使用一个char指针数组。
#define MAXFIELDS 100
#define MAX_LENGTH 245
char *dex_data[MAXFIELDS]; //declared globally.
我在很多函数中都使用了dex_data数组。我在这样的主要功能中分配内存
dex_data = malloc(sizeof(char *)*MAXFIELDS);
int p;
for(p=0; p < MAXFIELDS ; p++)
dex_data[p] = malloc(sizeof(char)*MAX_LENGTH);
每次都会遇到细分错误。我试图通过GDB检查错误。它说
#0 0x00007fb0a91b2b71 in __strlen_sse2 () from /lib64/libc.so.6
我分配了错误的内存,还是尝试分配更大的内存?
我不知道原因有人可以帮忙吗?提前致谢。
最佳答案
这个:
char *dex_data[MAXFIELDS];
是一个在堆栈上已经具有
MAXFIELDS
个char*
指针的数组。它是不可分配的。但是,这里:dex_data = malloc(sizeof(char *)*MAXFIELDS);
您正在尝试分配给它。那是未定义的行为。
只需删除该行。您不需要(也不允许)为
dex_data
分配内存。旁注:分配给数组类型至少应给您一个编译警告。看来您使用的是非常旧的编译器,应该升级。