使用Malloc for Structs时出现问题

时间:2012-09-14 03:48:05

标签: c pointers struct malloc

我不断地用一小部分代码得到分段错误,我不知道为什么,我正在使用malloc并且无法看到任何原因,就像它碰到数据的一部分一样,它的崩溃。 数据是:

listNode* node = (listNode*)malloc(sizeof(listNode));    <-This is the Line
strcpy(node->entry, string); 
node->next = NULL;

使用结构定义:

typedef struct
{
    char* entry;
    struct listNode* next;
}listNode;

数据确实在某个时刻被释放,但它无法达到这一点。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

你确定在malloc电话上崩溃了吗?你更有可能在strcpy上崩溃。事实上,在这种情况下,strcpy几乎保证会导致不良行为,但准确地说行为是未定义的。

只要您没有填满堆,malloc就应该成功。但是,由于您致电malloc而非calloc,因此您无法保证node->entry的内容。 C标准没有定义用malloc分配的内存中存储的内容,因此node->entry充满了垃圾。通过尝试复制到错误的指针,您的应用程序因尝试访问不正确的内存地址而崩溃。

Alexey Frunze在修复 - malloc空间上100%正确,并将node->entry更改为指向新分配的内存,然后string复制到{ {1}}。这避免了使用未初始化指针的未定义行为,如another SO answer中所述。

答案 1 :(得分:1)

您没有为entry指针分配内存。您正试图将string复制到未初始化指针entry指定的虚假位置。你可以这样做:

node->entry = malloc(strlen(string) + 1);
strcpy(node->entry, string);

答案 2 :(得分:0)

您没有为条目指针分配分配内存。虽然allocateg结构只为4个字节分配了*入口指针 你应该做的

listNode * node =(listNode *)malloc(sizeof(listNode)); //为结构分配内存 node-&gt; entry = malloc(strlen(string)+ 1); //为字符串分配内存 strcpy(node-&gt; entry,string); //复制字符串

现在它运行良好