由strlen_sse2()引起的分段错误

时间:2017-07-27 01:13:21

标签: c pointers memory heap

我正在使用一个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

我是否错误地分配了内存,还是尝试分配更大的内存? 我不知道原因。有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

此:

char  *dex_data[MAXFIELDS];

数组在堆栈上已经有MAXFIELDSchar*个指针。它不可分配。但是,这里:

dex_data = malloc(sizeof(char *)*MAXFIELDS);

您正尝试分配给它。这是未定义的行为。

只需删除该行即可。您不需要(也不允许)为dex_data分配内存。

旁注:分配给数组类型至少应该给你一个编译警告。您似乎正在使用非常旧的编译器,您应该升级。