gpt4 book ai didi

c - 尝试将指针索引到函数中的指针时出现段错误

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

我正在尝试使用数组(malloc-ed)做一些事情,即自定义结构的 arr。该数组通过引用传递给一个函数。每当我在运行时尝试在函数中索引除 arr[0] 以外的任何内容时,我都会遇到段错误(例如 (*arr[1])->i = 3; ).为什么会这样?

完整的源代码是:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100

typedef struct{
int i;
float f;
}foo;

void doSomething(foo ***arr);

int main()
{
foo **arr = (foo**) malloc (SIZE * sizeof(foo*));
int i;
for(i = 0; i < SIZE; i++)
arr[i] = (foo*)malloc(sizeof(foo));

arr[1]->i = 1;
printf("Before %d\n",arr[1]->i );
doSomething(&arr);
printf("After %d\n",arr[1]->i );
return 0;
}

void doSomething(foo ***arr)
{
(*arr[1])->i = 3;
}

最佳答案

你的问题是行

(*arr[1])->i = 3;

因为下标算子的求值precedes取消引用的评估等效于以下内容:

(*(arr[1]))->i = 3;

这显然是错误的。你需要

(*arr)[1]->i = 3;

因此。


注意事项:

  • do not cast the result of malloc
  • 添加#include <stdlib.h>解决警告
  • 添加额外的间接层( foo*** 指向 foo** )是不必要的;只需按值复制
  • (除了上面的注释)在您的情况下,一个好的旧一维数组实际上应该足够了

  • 调用 freemalloc 之后

关于c - 尝试将指针索引到函数中的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290476/

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