我正在研究这种结构内存分配。有人可以帮我弄清楚它为什么显示作者,标题和身份的空白。输入不会继续在打印功能上传递,我无法弄清楚原因。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct book{
char author[16];
char title[16];
int id;
};
int i, n;
void add_records(struct book *b);
void print_records(struct book *b);
int main(int argc, char *argv) {
struct book *someBook;
someBook = (struct book*) malloc(sizeof(struct book));
add_records(someBook);
print_records(someBook);
return 0;
}
void add_records(struct book *b){
fprintf(stderr, "How many items do you want to add\n");
scanf("%d", &n);
b = (struct book*) malloc(n * sizeof(struct book));
for(i = 0; i < n; i++){
fprintf(stderr,"add author\n");
scanf("%s", (b + i)->author);
fprintf(stderr,"add title\n");
scanf("%s",(b+i)->title);
fprintf(stderr,"add Id: \n");
scanf("%d", &(b+i)->id);
}
}
void print_records(struct book *b){
b = (struct book*) malloc(sizeof(struct book));
for(i = 0; i < n; ++i){
printf("Author: %s\t Title: %s\t Id: %d\n", (b+i)->author,(b+i)->title,(b+i)->id);
}
}
答案 0 :(得分:0)
您在main中分配了一本书,并将其传递给add_records
。然后在add_records
中分配另一本书。写进第二本书。从add_book
返回(泄漏填好的书),然后回到主要的未经修改的书中。
然后你打电话给print_records
,你从那里传来这本书。然后立即创建另一本空书,打印它的详细信息并返回泄漏另一本书)。
你从来没有碰过主要开始的原书......
解决方案:摆脱b = (struct book*) malloc(sizeof(struct book));
和add_records
中的print_records
行。