所以我每次都得到这个错误,我似乎无法弄清楚在哪里解决它。
这是它始终返回null的地方:
wordData * ptr;
ptr = (wordData*)malloc(sizeof(wordData)); //returns null every time
if(NULL == ptr)
{
printf("\n Node creation failed in add list\n");
return NULL;
}
这是我的结构:
typedef struct _wordData
{
int iWordID;
char * cWord;
struct _wordData *next;
} wordData;
我之前在我的列表中创建完全相同代码的headnode工作原理! 编辑:阐述:
printf("\n creating list with headnode as [%d] %s\n",iWordID,cWord);
wordData *ptr;
ptr = (wordData*)malloc(sizeof(wordData));
if(NULL == ptr)
{
printf("\n Node creation failed in create list \n");
return NULL;
}
所以上面的代码实际上创建了我的headnode。
编辑:记忆: 我有大量的内存可用:)
编辑:更多代码:
void clearStr() // adding word into list with a struct containing word,wordID
{
add_to_list(iID,cStr,true);
memset(cStr, '\0', sizeof(cStr) );
iCounter = 0;
}
wordData* add_to_list(int iWordID, char * cWord, bool add_to_end)
{
char temp[strlen(cWord)+1];
strcpy(temp, cWord);
if(NULL == head)
{
return (create_list(iWordID, temp));
}
if(add_to_end)
printf("\n Adding node to end of list with iWordID [%d] %s\n",iWordID, cWord);
else
printf("\n Adding node to beginning of list with iWordID [%d]\n",iWordID);
int sizeWordData = sizeof(wordData);
printf("Size wordData is: %d",sizeWordData); //12 every time
wordData * ptr;
ptr = (wordData*)malloc(sizeof(wordData)); //waarom is dit null?
if(NULL == ptr)
{
printf("\n Node creation failed in add list\n");
return NULL;
}
ptr->iWordID = iWordID;
ptr -> cWord,temp;
strcpy(ptr -> cWord, temp);
ptr->next = NULL;
if(add_to_end)
{
curr->next = ptr;
curr = ptr;
printf("pointers geset");
}
else
{
ptr->next = head;
head = ptr;
}
return ptr;
}
我搜索了所有内容,但没有一个解决方案帮助了我,所以请帮助我们!
答案 0 :(得分:3)
实际上,您之前已经使用缓冲区溢出来销毁堆。
strcpy(ptr -> cWord, temp);//without allocating anything to cWord
这会导致malloc行为不端。做:
ptr -> cWord = malloc(strlen(temp) +1);//allocate
strcpy(ptr -> cWord, temp);//then copy
答案 1 :(得分:2)
你的问题中没有足够的信息可以正确回答,我很害怕。
此:
ptr = (wordData*)malloc(sizeof(wordData)); //returns null every time
最好写成:
ptr = malloc(sizeof *ptr);
它更短,重复次数更少,removes the cast,并且通常更充满胜利。
但是,既然你说同一个代码在程序流程的早期工作,那么你的代码很可能在这里做正确的事情。
您分配了多少个节点?可能是某些递归失控,分配了数百万个节点并耗尽了你的记忆?
另请注意,您的标题与您的文字相矛盾,使这个问题更加令人困惑。
答案 2 :(得分:0)
来自malloc()
的{{1}},malloc()
可以返回NULL
两次:
0
,则可以返回NULL
您说How ever when I create the headnode in my list earlier on the exact same code works
这意味着您的示例中缺少可能包含问题的内容:
ptr = (wordData*)malloc(sizeof(wordData));
^
this should never be 0, so that shouldn't be the problem
你的程序中是否有循环或递归调用?你进行了多少次分配?
修改强>
你说你只是从文件中读取,所以试试这个:
main()
open file
loop for length of file
allocate your memory
free memory
如果这个最小代码示例失败后发布代码和文本文件的样本,如果它有效,那么你的大型程序中还有其他东西导致问题,你可以从那里“重新构建”并可能找到它