gpt4 book ai didi

c - 指向本地范围内的结构体段错误数组的指针 (C)

转载 作者:行者123 更新时间:2023-11-30 20:11:36 27 4
gpt4 key购买 nike

我想将数组指针传递给 C 函数,但我不断遇到段错误。

所以要点是......

我有一个结构:

typedef struct A {
int cost;
} B

在主文件中:

static B (*arr_p)[] = NULL;
static B arr[30];

void foo(B **item)
{
printf("cost %d\n",(*item)[0].cost); // seg fault 11 :(
}

int main(int argc, char **argv)
{
arr_p = &arr;
(*arr_p)[0].cost = -1;
printf("Cost %d\n", (*arr_p)[0].cost); // works
foo((B **) arr_p);
}

有办法解决这个讨厌的段错误吗?

最佳答案

您正在将一个指向数组的指针传递给foo。您应该更改 foo 的定义以接受指向数组的指针。

改变

void foo(B **item)
{
printf("cost %d\n",(*item)[0].cost); // seg fault 11 :(
}

void foo(B (*item)[])
{
printf("cost %d\n",(*item)[0].cost); // seg fault 11 :(
}

由于 foo((B **) arr_p); 中的强制转换,问题被掩盖了; 如果没有强制转换,您会在该行收到警告。通常,消除这样的警告并不是一个好主意。在这种情况下,会导致段错误。

关于c - 指向本地范围内的结构体段错误数组的指针 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083896/

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