This question already has answers here:
Closed 11 months ago.
Crash or “segmentation fault” when data is copied/scanned/read to an uninitialized pointer
(5个答案)
在下面的代码中,我有两个结构。
第一个是
第二个是
程序可以编译并运行得很好,
但是当我添加额外的变量(例如
我不知道为什么会这样,因为一切似乎都初始化得很好谢谢。
(5个答案)
在下面的代码中,我有两个结构。
第一个是
book
,它描述了使用page
的书的页数。第二个是
library
,它使用指针books
保存所有图书,参数num_book
表示图书馆的图书总数。程序可以编译并运行得很好,
printf
结果正常。但是当我添加额外的变量(例如
int x = 1;
)时,如代码所示我仍然可以编译程序,但是运行可执行文件会导致分段错误。我不知道为什么会这样,因为一切似乎都初始化得很好谢谢。
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int page;
} book;
typedef struct {
int num_book;
book *books;
} library;
int main() {
library *my_library;
int n = 5; // number of books in the library
// extra variable not used
// uncomment it gives segmentation fault
// int x = 1;
my_library->num_book = n;
my_library->books = (book *) malloc( (my_library->num_book) * sizeof(book) );
for(int i = 0; i < my_library->num_book; i++){
my_library->books[i].page = i+10;
printf("Book %d\n"
"Number of pages = %d\n",
i, my_library->books[i].page);
}
return 0;
}
最佳答案
在声明my_library
my_library = malloc(sizeof(*my_library));
关于c - 多余的变量会导致段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53722785/
10-12 16:06