gpt4 book ai didi

c - 如何取消引用指向堆上指针的指针?

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:24 25 4
gpt4 key购买 nike

我在取消对指针的引用时遇到了一些问题。我有一个节点 e 放在堆上,还有另一个名为 List 的节点。 List 是指向 e 的指针。

由于某种原因,当我通过 List 取消引用 e 时出现段错误:

struct ELEMENT{
int key;
int edge;
struct ELEMENT *adjList;
};

int numOfNodes = 3;

struct ELEMENT *e = (ELEMENT*)malloc(numOfNodes * sizeof(struct ELEMENT));
// e is now on the heap

struct ELEMENT **List = (ELEMENT**)malloc(numOfNodes * sizeof(struct ELEMENT));
// List (pointer to e) is now on the Heap

List[1]->key = 5; // segmentation fault occurs here

最佳答案

正如其他人已经注意到的,您不需要第二个 malloc。你只是想让 List 指向 e 所以你只需要将 e 的“地址”分配给 list.

struct ELEMENT **List = &e;

除此之外,您尝试使用 List 访问元素的方式是错误的。像这样看:

  • e[n] 将访问索引 n 处的结构 ELEMENT

  • *Liste

  • 因此,要访问数组中的元素,您需要 (*List)[n]

  • 要访问成员,您需要 (*List)[n].key

顺便说一句:你的 ...malloc.... 都不能编译,因为你忘记了 struct 在类型转换中,而不是添加 struct只需删除类型转换。喜欢:

struct ELEMENT *e =  malloc(numOfNodes * sizeof *e);
^ ^^
no cast use dereferenced pointer to calculate size

通过这些更改,您的完整代码将是:

struct ELEMENT{
int key;
int edge;
struct ELEMENT *adjList;
};

int numOfNodes = 3;

struct ELEMENT *e = malloc(numOfNodes * sizeof *e);
struct ELEMENT **List = &e;
(*List)[1].key = 5;

关于c - 如何取消引用指向堆上指针的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55606699/

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