我正在使用Visual Studio 2010,我知道它有一些特性。我希望不是那样。
这显然是一个更大程序的一部分,但我已经试着简化它,这样我就能知道我在做什么。
每次运行它时,CaloC赋值都被解析为NULL,而我退出程序。我在calloc周围没有if语句的情况下尝试了它,但得到了一个调试错误,所以我很确定问题出在calloc上。
任何帮助都将不胜感激。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct NODE {
    char * x;
    struct NODE * link;
} NODE;

typedef struct {
    NODE * first;
} STRUCTURE;

NODE * insertNode (NODE * pList, NODE * pPre, char * string);

int main (void) {
   STRUCTURE  str[2];
   char * string = "blah";
    str[2].first = NULL;
    str[2].first = insertNode (str[2].first, str[2].first, string);
    printf ("\n%s\n", str[2].first->x);
return 0;
}

NODE * insertNode (NODE * pList, NODE * pPre, char * string)
{
    //Local Declarations
    NODE * pNew;

    //Statements
    if ( !(pNew = (NODE*)malloc(sizeof(NODE))))
            printf ("\nMemory overflow in insert\n"),
                exit (100);
        if ( ( pNew->x = (char*)calloc((strlen(string) + 1), sizeof(char))) ==     NULL);
        {
            printf ("\nMemory overflow in string creation\n");
            exit (100);
        }
        strncpy(pNew->x, string, strlen(pNew->x));
    if (pPre == NULL) //first node in list
    {
        pNew->link = pList;
        pList = pNew;
    }
    else
    {
        pNew->link = pPre->link;
        pPre->link = pNew;
    }

    return pList;
}

最佳答案

我正在使用Visual Studio 2010,我知道它有一些特性。我希望不是那样。
它是一个分号:

if ( ( pNew->x = (char*)calloc((strlen(string) + 1), sizeof(char))) ==     NULL);
                                                                                ^

无论返回什么calloc,都将输入下面的块并调用exit
旁注,你可以这样写:
if (!(pNew->x = calloc(strlen(string) + 1, 1)))
    /* ... */

关于c - 动态地为链接列表节点中的字符串分配内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10167403/

10-12 02:07