0

我不断收到一小部分代码的分段错误,我不知道为什么,我正在使用 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;

数据确实在某一点被释放,但它无法达到所述点。谢谢您的帮助!

4

3 回答 3

2

你确定你在malloc通话时崩溃了吗?您更有可能在strcpy. 事实上,strcpy在这种情况下,几乎可以肯定会导致不良行为,尽管准确地说行为是未定义的。

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

Alexey Frunze 在修复空间上 100% 正确,malloc并更改node->entry为指向新分配的内存,然后复制stringnode->entry. 正如我在另一个 SO answer中描述的那样,这避免了使用未初始化指针的未定义行为。

于 2012-09-14T03:50:41.010 回答
1

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

node->entry = malloc(strlen(string) + 1);
strcpy(node->entry, string);
于 2012-09-14T03:51:43.533 回答
0

您没有为入口指针分配分配内存。就像分配结构只为 *entry 指针分配了 4 个字节,你应该这样做

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

现在它会运行良好

于 2012-09-14T04:45:52.773 回答