鱼C论坛

 找回密码
 立即注册
查看: 961|回复: 1

[已解决]malloc内存分配失败

[复制链接]
发表于 2020-5-17 10:13:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <string.h>
  3. struct book                                                //书籍信息的结构
  4. {       
  5.         int book_id;                               
  6.         char book_name[30];       //一个书的id、一个书名、5个关键字、3个作者、一个发布地、一个发布时间
  7.         char keyword1[30];
  8.         char keyword2[30];
  9.         char keyword3[30];
  10.         char keyword4[30];
  11.         char keyword5[30];
  12.         char author1[30];
  13.         char author2[30];
  14.         char author3[30];
  15.         char publisher[30];
  16.         char publish_time[30];
  17.         struct book *next;
  18. }*Book;
  19. struct book *data_book_input();

  20. void main()
  21. {
  22.         struct book *head;
  23.         head = data_book_input();
  24.         printf("%d\n",head->book_id);
  25.         head = head->next;
  26.         printf("%d",head->book_id);
  27. }

  28. struct book *data_book_input()
  29. {       
  30.         struct book *p,*head,*tail;
  31.         head = tail = NULL;
  32.         int book_id;
  33.         char book_name[30];
  34.         char keyword1[30];
  35.         char keyword2[30];
  36.         char keyword3[30];
  37.         char keyword4[30];
  38.         char keyword5[30];
  39.         char author1[30];
  40.         char author2[30];
  41.         char author3[30];
  42.         char publisher[30];
  43.         char publish_time[30];
  44.         FILE *f = NULL;
  45.         if((f=fopen("data.txt","r")) == NULL)
  46.         {
  47.                 printf("File is Error! No1\n");
  48.                 return NULL;
  49.         }
  50.         while(fscanf(f, "%d %s %s %s %s %s %s %s %s %s %s %s",
  51.                 &book_id,book_name,keyword1,keyword2,keyword3,keyword4,keyword5,
  52.                 author1,author2,author3,publisher,publish_time) != EOF)
  53.         {
  54.         if((p = (struct book *)malloc(sizeof(struct book)))==NULL);                //分配储存空间
  55.                 {       
  56.                         printf("Error!");
  57.                         return NULL;
  58.                 }
  59.                 p->book_id = book_id;                                        //导入数据
  60.                 strcpy(p->book_name , book_name);
  61.                 strcpy(p->keyword1 , keyword1);
  62.                 strcpy(p->keyword2 , keyword2);
  63.                 strcpy(p->keyword3 , keyword3);
  64.                 strcpy(p->keyword4 , keyword4);
  65.                 strcpy(p->keyword5 , keyword5);
  66.                 strcpy(p->author1 , author1);
  67.                 strcpy(p->author2 , author2);
  68.                 strcpy(p->author3 , author3);
  69.                 strcpy(p->publisher , publisher);
  70.                 strcpy(p->publish_time , publish_time);
  71.                 p->next = NULL;        //顺序建立链表
  72.                 if(head == NULL)
  73.             head = p;
  74.             else
  75.             tail->next = p;
  76.             tail = p;
  77.         }                        //链表头地址是head,最后的next是NULL
  78.         fclose(f);
  79.         return head;       
  80. }
复制代码


为什么运行后出来的是 Error!,求指正,谢谢
最佳答案
2020-5-17 12:30:44
两个地方:
1. 使用malloc要引入头文件 #include <stdlib.h>
2. if((p = (struct book *)malloc(sizeof(struct book)))==NULL);  ==>> 这里多了个分号
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 12:30:44 | 显示全部楼层    本楼为最佳答案   
两个地方:
1. 使用malloc要引入头文件 #include <stdlib.h>
2. if((p = (struct book *)malloc(sizeof(struct book)))==NULL);  ==>> 这里多了个分号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 14:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表