我正在使用一个字符指针数组。
#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
分配内存。
旁注:分配给数组类型至少应该给您一个编译警告。看来您使用的是非常旧的编译器,您可能应该升级。
关于c - 由于 strlen_sse2() 导致的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339770/