C语言 如何使用malloc在链表中插入一个节点



我正在编写一个程序,该程序调用main中的一个函数,该函数创建一个节点来构建一个链表。程序从文件中读取要放置在节点中的字符。在进入创建节点的函数之前,程序运行良好。我不确定是否有逻辑或语法错误或其他什么。很抱歉篇幅太长,但错误离开始不远。另外,如果你想要我的头文件,请告诉我。代码来自我的C书:计算机科学:使用C的结构化编程方法,第三版。任何帮助(和解释我的错误)将非常感激!

谢谢!

c:

#include "my.h"
int main (int argc, char* argv[])
{
     int y;
     NODE* pList;
     NODE* pPre;
     NODE* pNew;
     DATA item;
     FILE* fpntr;
     int closeResult;
     pList = NULL;         
     fpntr = fopen(argv[1], "r");                            // open file 
        if(!fpntr)
            {
                 printf("Could not open input file.n");
                 exit (101);
            }
        else printf("The file opened.n");

printf("starting InNode.n");                                 //testing to see if this is working
    while((y = fscanf(fpntr, "%c", &(item.key))) != EOF)
           pList = InNode(pList, pPre, item);
printf("end InNode.n");                                      //testing to see if this is working, doesn't get this far
printf("starting printme.n");

    printme(pList);

printf("end printme.n");
     closeResult = fclose(fpntr);                             //close file 
        if(closeResult == EOF)
            {
                 printf("Could not close input file.n");
                 exit (102);
            }
        else printf("The file closed.n");
     free(a);
     return 0;
}

这里是InNode.c(直接来自我的书):

#include "my.h"
NODE* InNode (NODE* pList, NODE* pPre, DATA item)
{
    NODE* pNew;
printf("start malloc.n");                                   //testing to see if this is working
    if (!(pNew = (NODE*) malloc(sizeof(NODE))))
         printf("Memory overflow in insert.n");
         exit(100);

printf("malloc complete.n");                                //testing to see if this is working, doesn't get this far

    pNew->data = item;
printf("start if statement.n");
    if (pPre == NULL)
        {
            pNew->link = pList;
            pList = pNew;
        }
     else
        {
            pNew->link = pPre->link;
            pPre->link = pNew;
        }
printf("end else statement.n");
     return pList;
}

我马上注意到一个问题:

if (!(pNew = (NODE*) malloc(sizeof(NODE))))
     printf("Memory overflow in insert.n");
     exit(100);

你有一个if语句,正文周围没有大括号,有两行缩进,就好像它们应该在if语句的正文中一样。只有第一行被解析为if语句的一部分;第二行exit(100)是无条件发生的,所以无论发生什么,程序都将退出。

你应该把它改成:

if (!(pNew = (NODE*) malloc(sizeof(NODE)))) 
{
     printf("Memory overflow in insert.n");
     exit(100);
}

如果这不能解决您的问题,或者对于将来的问题,我建议您发布您得到的输出。如果您发布关于实际发生的事情的详细信息(例如输出、意外行为和您期望的内容,或类似的信息),而不是仅仅说它不工作而没有更多细节,那么人们可以更容易地发现问题。

您缺少{ }

if (!(pNew = (NODE*) malloc(sizeof(NODE))))
{
     printf("Memory overflow in insert.n");
     exit(100);
}

一个问题是,你不初始化pPre之前使用它的值

相关内容

  • 没有找到相关文章

最新更新