我正在使用Visual Studio 2010,我知道它有一些特性。我希望不是那样的。
这显然是一个更大的计划的一部分,但我试图简化它,以便我能弄清楚我在做什么。
每次运行它时,calloc赋值都会解析为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;
}
答案 0 :(得分:2)
我正在使用Visual Studio 2010,我知道它有一些特性。我希望不是那样的。
这是一个分号:
if ( ( pNew->x = (char*)calloc((strlen(string) + 1), sizeof(char))) == NULL);
^
无论calloc
返回什么,都会输入以下数据块,您将调用exit
。
旁注,你可以这样写:
if (!(pNew->x = calloc(strlen(string) + 1, 1)))
/* ... */