我有以下代码
#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 个字节。