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


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

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


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

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

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

09-07 10:45