除第一个元素之外的所有元素的分段错误

迈克尔·博哈南

所以我有一个名为 'library' 的结构,它存储结构 'books' 的对象,并由 3 本书的列表初始化,但是当我尝试打印对象的属性时,我得到一个“分段错误(核心已转储) “ 错误。我知道这意味着我正在尝试访问一些我无权访问的内存,但在这种情况下我可以正确访问第一个元素,所以它让我相信我错误地初始化了一些东西。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXBOOKS 10

typedef struct books
{
    char* title;
    char* author;
    int id;
}book;

typedef struct library
{
    int number_of_books;
    book* booklist [MAXBOOKS];
}lib;

void storeBook(lib library,book CurrentBook)
{
    library.booklist[0] = &CurrentBook;
}

void printLibrary(lib library)
{
    for(int i = 0; i < library.number_of_books; i++)
    {
        printf("Author:%s\n",library.booklist[i]->title);
    }
}


int main()
{

    book b_1 = {"The trial","Kafka",101};
    book b_2 = {"The lurking fear","Lovecraft",102};
    book b_3 = {"Dora's storytime collection","Valdes",103};

    book* list = (book*)malloc(3*sizeof(book));
    list[0] = b_1; list[1] = b_2; list[2] = b_3;

    lib CurrentLibrary = {3,{list}};
    printLibrary(CurrentLibrary);
    return 0;
}
克里希纳·坎特·耶努穆拉

booklist1[i] = *(booklist1+i), 那么booklist2[i][j] = *(*(booklist2+i)+j), 如果j=0, 那么*(*(booklist2+i)+j) = *(*(booklist2+i)+0) = *(booklist2[i]) = *booklist2[i]

booklist2[0]指向第一行,booklist2[1]指向第二行,依此类推……等等。

您正在定义一个书本指针数组(二维数组):book* booklist [MAXBOOKS]
但是list是一个书本数组(一维数组)。执行此语句后,lib CurrentLibrary = {3,{list}}; list数组将存储到booklist[0]行中。但是所有其他指针booklist[1], booklist[2],..... booklist[9]都没有指向任何元素。但是,你正在访问booklist[1]booklist[2]以及booklist[3]printLibrary功能。这就是分段错误的原因。

如需更多信息(对于二维数组),请打印以下几行:

printf("Title %s\n", library.booklist[0][0].title);版画-->标题审判printf("Title %s\n", library.booklist[0][1].title);版画-->标题潜伏的恐惧
printf("Title %s\n", library.booklist[0][2].title);版画-->标题朵拉的故事时间合集

但是尝试访问library.booklist[1][0].title会引发分段错误,因为第二行指针未指向任何元素。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXBOOKS 10

typedef struct books
{
    char* title;
    char* author;
    int id;
}book;

typedef struct library
{
    int number_of_books;
    book *booklist;  // It should be 1-D array, since you are passing 1-D array of book
}lib;

void storeBook(lib library,book CurrentBook)
{
    library.booklist[0] = CurrentBook;
}

void printLibrary(lib library)
{
    for(int i = 0; i < library.number_of_books; i++)
    {
        printf("Title:%s\n",library.booklist[i].title);
        printf("Author:%s\n",library.booklist[i].author);
        printf("Book ID:%d\n",library.booklist[i].id);
    }
}


int main()
{

    book b_1 = {"The trial","Kafka",101};
    book b_2 = {"The lurking fear","Lovecraft",102};
    book b_3 = {"Dora's storytime collection","Valdes",103};

    book* list = malloc(3*sizeof(book));
    list[0] = b_1; list[1] = b_2; list[2] = b_3;

    lib CurrentLibrary = {3,list}; // list is 1-D array of book
    printLibrary(CurrentLibrary);
    return 0;
}

输出 :

Title:The trial
Author:Kafka
Book ID:101
Title:The lurking fear
Author:Lovecraft
Book ID:102
Title:Dora's storytime collection
Author:Valdes
Book ID:103

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何加入数组中除第一个元素之外的所有元素?

CSS - 隐藏除第一个之外的所有同类元素 - 不是子元素

c ++ 98,向量,删除除第一个元素之外的所有元素

使用纯CSS隐藏除元素的第一个孩子之外的所有孩子

悬停状态的第 n 个子公式 - 除第一个元素之外的所有元素

使用打字稿从数组中提取除第一个之外的所有元素类型

jQuery / JavaScript:如何删除第一个<li>中除<a> text </a>之外的所有元素

如何使用 JQuery 删除除第一个 div 之外的所有子 div 元素?

除矩阵的除第一个元素外的所有元素

如何删除除第一个元素外的所有子元素?

选择除第一个元素外的所有子元素

使用CSS3选择除第一个元素外的所有元素

通过JavaScript隐藏DataList的除第一个元素外的所有元素

为除第一个元素以外的所有元素实现代码

需要一个数组,其中新数组的第一个元素=除第一个元素以外的所有元素的和

如何取除第一个 k 以外的所有元素

对除第一个元素qsort C以外的所有内容进行排序

选择除第一个以外的所有元素

检查除第一个元素外的所有元素是否都具有特定类

获取除第一个和最后一个以外的所有数组元素

将列表中除第一个元素外的所有元素连接到字符串

如何在Matlab中获取矩阵的除第一个元素以外的所有元素?

如何从数组中删除除JavaScript中的第一个元素以外的所有元素

为什么我的TreeSet不添加除第一个元素之外的任何内容?

如何过滤数组中除第一个之外的每个元素?JS

尝试从列表中获取除第一个或最后两个元素之外的任何内容时,Python 给我一个错误

删除除第一个使用递归之外的所有数字

如何删除数组中除第一个索引之外的所有内容?

如何循环遍历列表中除第一个之外的所有项目