C malloc 总是返回 null



所以我每次都收到这个错误,我似乎不知道在哪里解决它。

这是它始终返回 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
如果

这个最小的代码示例失败,发布代码和文本文件的示例,如果它有效,那么在你的更大程序中还有其他东西导致了问题,你可以从那里"构建备份"并可能找到它。

相关内容

  • 没有找到相关文章