我正在使用一个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
我是否错误地分配了内存,还是尝试分配更大的内存? 我不知道原因。有人可以帮忙吗?提前谢谢。
答案 0 :(得分:0)
此:
char *dex_data[MAXFIELDS];
数组在堆栈上已经有MAXFIELDS
个char*
个指针。它不可分配。但是,这里:
dex_data = malloc(sizeof(char *)*MAXFIELDS);
您正尝试分配给它。这是未定义的行为。
只需删除该行即可。您不需要(也不允许)为dex_data
分配内存。
旁注:分配给数组类型至少应该给你一个编译警告。您似乎正在使用非常旧的编译器,您应该升级。