C 分段故障11
写出这个库程序,当我运行终端时,我收到一个分段错误11。起初调试时,它似乎位于结构的某个地方,但后来它给了我一些问题,我在哪里声明了我的文件指针。有人能解释一下这件事吗C 分段故障11,c,segmentation-fault,codeblocks,C,Segmentation Fault,Codeblocks,写出这个库程序,当我运行终端时,我收到一个分段错误11。起初调试时,它似乎位于结构的某个地方,但后来它给了我一些问题,我在哪里声明了我的文件指针。有人能解释一下这件事吗 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LENGTH 40 #define MAX_BOOKS 1000 struct book { char title[MAX_LENGTH];
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 40
#define MAX_BOOKS 1000
struct book
{
char title[MAX_LENGTH];
char author[MAX_LENGTH];
char subject[MAX_LENGTH];
}*Book;
struct library
{
struct book collection[MAX_BOOKS];
int num_books;
}*lib;
int main()
{
struct library *lib;
char title[MAX_LENGTH], author[MAX_LENGTH], subject[MAX_LENGTH];
Book = NULL;
lib->num_books = 0;
int events = 0, selection = 0;
FILE *ifp;
ifp = fopen("library.txt", "r");
if (ifp == NULL)
{
printf("\nFile not found\n");
exit(0);
}
fscanf(ifp, "%d", &events);
for (int i=0;i<events; i++)
{
Book = NULL;
fscanf(ifp, "%d", &selection);
switch (selection)
{
case 1:
fgets(title, MAX_LENGTH, ifp);
fgets(author, MAX_LENGTH, ifp);
fgets(subject, MAX_LENGTH, ifp);
strcpy(Book->title, title);
strcpy(Book->author, author);
strcpy(Book->subject, subject);
lib->num_books += 1;
//addBook(lib);
break;
case 2:
lib->num_books -= 1;
//deleteBook();
break;
case 3:
//search;
break;
case 4:
break;
case 5:
break;
default:
printf("Invalid command\n");
break;
}
}
fclose(ifp);
return 0;
}
#包括
#包括
#包括
#定义最大长度40
#定义最大图书1000册
结构体的构造
{
字符标题[最大长度];
字符作者[最大长度];
字符主题[最大长度];
}*书;
结构库
{
结构图书收藏[MAX_BOOKS];
国际图书;
}*自由基;
int main()
{
结构库*lib;
字符标题[MAX_LENGTH],作者[MAX_LENGTH],主题[MAX_LENGTH];
Book=NULL;
lib->num\u books=0;
int事件=0,选择=0;
文件*ifp;
ifp=fopen(“library.txt”,“r”);
如果(ifp==NULL)
{
printf(“\n未找到文件\n”);
出口(0);
}
fscanf(ifp、%d、&events);
用于(int i=0;ititle,标题);
strcpy(书->作者,作者);
strcpy(书籍->主题,主题);
lib->num_books+=1;
//addBook(lib);
打破
案例2:
lib->num_books-=1;
//deleteBook();
打破
案例3:
//搜索;
打破
案例4:
打破
案例5:
打破
违约:
printf(“无效命令\n”);
打破
}
}
fclose(ifp);
返回0;
}
1)错误在以下行中
lib->num\u books=0
指针变量lib在没有初始化的情况下延迟
2) 另一个错误是,您正在为读取操作“r”打开文件,但试图将该文件用于写入操作
lib->num_books = 0;
这造成了问题。您尚未初始化lib
分配内存给它-
lib=malloc(sizeof(struct library));
编辑
也不要忘记释放分配的内存。
lib->num\u books=0代码>?使用调试器。至少它会告诉您是哪一行代码导致seg故障。如果使用得当,通过查看seg故障点的变量状态,很有可能发现问题。是的,“lib”指针未初始化:(用该初始化更新问题中的代码。否则所有答案都是关于统一化变量的。@Leopold_Stotch更新后的代码有太多错误。1.全局变量被初始化为零。因此您仍然无法取消引用它。2.您有一个同名的局部变量。局部变量e将隐藏全局变量。因此,您仍在访问统一化的局部变量。写入操作具体在哪里?有点困惑,但我肯定感谢所有反馈。