c - 由于 strlen_sse2() 导致的段错误

标签 c pointers memory heap-memory

我正在使用一个字符指针数组。

#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 分配内存。

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

关于c - 由于 strlen_sse2() 导致的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339770/

相关文章:

Java 8 Update 60 减少可用堆内存

带有 LibGDX 字体内存泄漏的 Java

java - 在java中,是否可以在执行过程中的任何特定时间点找到内存堆上的当前对象?

c - 如何控制 popen stdin、stdout、stderr 重定向?

c++ - 当退出 new/malloc 函数时,如何将 new/malloc 返回的指针保留在范围内?

c - 在 C 中制作 hashmap 时遇到指针问题

有人可以修改我的代码吗?我需要读取单个字符串并将其存储到数组中

java - 关于else if实现的问题

c - 为 recv() 中使用的缓冲区重新分配内存

c - 扩展 C 宏的类型