的数组我有以下代码写入结构
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct Example
{
uint16_t a;
uint16_t b;
} ExampleStruct;
void derp(struct Example * bar[], uint8_t i)
{
uint8_t c;
for(c = 0; c < i; ++c)
{
bar[c]->a = 1;
bar[c]->b = 2;
}
}
int main()
{
struct Example * foo;
uint8_t i = 3;
foo = malloc(i*sizeof(ExampleStruct));
derp(&foo, i);
free(foo);
return 0;
}
我得到段错误和所有调试告诉我,代码停止工作,由于
bar[c]->a = 1;
我试图重新安排到这一切的以下
(*bar)[c]->a = 1;
(*bar[c])->a = 1;
bar[c].a = 1;
(*bar)[c].a = 1;
并没有成功。我究竟做错了什么?我不明白为什么这是失败的,我不明白为什么bar [0],bar [1]和bar [2]的地址相距太远,每个地址只需要2个字节。
它更改为'结构示例* bar'和'DERP(FOO,i)的'和'bar [c] .a'。就这样。你为什么要传递指针的地址?你不需要改变指针。只有数组中的元素。 – Elazar
除了被调用的函数(我认为你也写了)之外,是否有某些特定的原因需要它传递foo by-address *?如果是这样,那么请按照Acme的回答建议。如果没有,那么按照Elazar的评论建议。没有这个或那个,你会调用未定义的行为。 – WhozCraig
因为我想在主 –