gpt4 book ai didi

无法访问数组指针 C 的索引

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:17 24 4
gpt4 key购买 nike

我正在尝试在 C: 中设置一个相邻的列表数组

mygraph->table = (Node *)malloc(MaxSize * sizeof(Node));
check(mygraph->table, error);
int i;
for(i = 1; i <= MaxSize; i++)
{
mygraph->table[i].name = NULL;
mygraph->table[i].outlist = NULL;
mygraph->table[i].outdegree = 0;
}
...

当我运行这段代码时,它运行良好。但是当我尝试访问表中的索引时,出现段错误:

mygraph->table[n].name = name;

我检查了 n 索引,它是正确的。 MaxSize 为 10,但即使 n = 1,我也会遇到段错误。

编辑:

typedef struct linkedlist { // linked list of ints (for use in Node)
int index;
struct linkedlist *next;
} List;

typedef struct { // a Node of a Graph
char *name;
List *outlist; // adjacency list
int outdegree; // length of outlist
//double pagerank_score; //not needed for this exercise
} Node;

typedef struct {
// your code goes here
int MaxSize; /*Maximum number of vertices that the graph can constain*/
Node *table; /*Adjacency lists' array*/
} Graph;

最佳答案

I get a segmentation fault even when n = 1.

这是因为您的代码有未定义的行为。它写入数组的末尾:

for(i = 1; i <= MaxSize; i++) // should be i=0 ; i<MaxSize

n10 时,代码不会在您的系统上崩溃 - 可能是因为 malloc 在 block 的末尾添加了足够的填充以容纳一个超出数组末尾的额外元素,但错误仍然存​​在。

您可以使用内存分析器找到此类隐藏的错误,例如valgrind .

解决方法是在初始化时使用正确的索引:

for(int i = 0 ; i != MaxSize ; i++) {
}

关于无法访问数组指针 C 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com