在C89中,以下代码可以正常工作:
typedef struct{
int size;
int **ptr;
}foo;
int main()
{
foo *var;
var = malloc(sizeof(foo) + 2 * sizeof(int*));
int a = 3, b = 6;
var->ptr[0] = &a;
var->ptr[1] = &b;
printf("%d %d\n", (*var->ptr[0]), (*var->ptr[1]));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行时显示:3 6
但如果我更换
var = malloc(sizeof(foo) + 2 * sizeof(int*));
Run Code Online (Sandbox Code Playgroud)
同
var = malloc(sizeof(foo));
var = realloc(var, sizeof(foo) + 2 * sizeof(int*));
Run Code Online (Sandbox Code Playgroud)
它编译时没有任何警告,但我在以下行得到了分段错误:
var->ptr[0] = &a;
Run Code Online (Sandbox Code Playgroud)
我真的不知道我做错了什么,所以我很感激任何输入.我是初学者,所以如果我的错误显而易见,我道歉.
谢谢.