所以我每次都收到这个错误,我似乎不知道在哪里解决它。
这是它始终返回 null 的地方:
wordData * ptr;
ptr = (wordData*)malloc(sizeof(wordData)); //returns null every time
if(NULL == ptr)
{
printf("n Node creation failed in add listn");
return NULL;
}
这是我的结构:
typedef struct _wordData
{
int iWordID;
char * cWord;
struct _wordData *next;
} wordData;
当我之前在列表中创建完全相同的代码的头节点时,如何工作!编辑:详细说明:
printf("n creating list with headnode as [%d] %sn",iWordID,cWord);
wordData *ptr;
ptr = (wordData*)malloc(sizeof(wordData));
if(NULL == ptr)
{
printf("n Node creation failed in create list n");
return NULL;
}
所以上面的代码实际上创建了我的头节点。
编辑:在内存上:我有大量可用内存:)
编辑:更多代码:
void clearStr() // adding word into list with a struct containing word,wordID
{
add_to_list(iID,cStr,true);
memset(cStr, ' ', 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] %sn",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 listn");
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;
}
我已经搜索了所有内容,但没有一个解决方案对我有帮助,所以帮助将不胜感激!
您实际上之前已经用缓冲区溢出销毁了堆。
strcpy(ptr -> cWord, temp);//without allocating anything to cWord
这将导致 malloc 行为不端。做:
ptr -> cWord = malloc(strlen(temp) +1);//allocate
strcpy(ptr -> cWord, temp);//then copy
恐怕您的问题中没有足够的信息来正确回答它。
这:
ptr = (wordData*)malloc(sizeof(wordData)); //returns null every time
最好写成:
ptr = malloc(sizeof *ptr);
它更短,重复更少,去除了演员表,并且通常更充满胜利。
但是,由于您说相同的代码在程序流的早期工作,因此您的代码很可能在这里执行正确的操作。
您分配多少个节点?可能是某些递归失控,分配了数百万个节点并耗尽了您的内存吗?
另请注意,您的标题与您的文本相矛盾,使这个问题更加混乱。
在 malloc()
的手册页中,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
如果这个最小的代码示例失败,发布代码和文本文件的示例,如果它有效,那么在你的更大程序中还有其他东西导致了问题,你可以从那里"构建备份"并可能找到它。