c-额外的变量导致分段错误



在下面的代码中,我有两个structs。

第一个是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 %dn"
"Number of pages = %dn",
i, my_library->books[i].page);
}
return 0;
}

my_library声明后添加此行

my_library = malloc(sizeof(*my_library));

在中

library *my_library;
/* ... */
my_library->num_book = n;
// ^^^^^^^^^^ junk here

my_library尚未分配(或初始化(可用值。

C中,必须使用malloc手动为结构分配内存。

#include <stdlib.h>
#include <stdio.h>
typedef struct {
int page;
} book;
typedef struct {
int num_book;
book *books;
} library;

int main() {
library *my_library = (library *) malloc(sizeof(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 %dn"
"Number of pages = %dn",
i, my_library->books[i].page);
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新