Spa*_*ire 2 c struct pointers realloc
在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)
我真的不知道我做错了什么,所以我很感激任何输入.我是初学者,所以如果我的错误显而易见,我道歉.
谢谢.
我认为你的声明是错误的.以下行假定ptr指向一些内存,实际上它根本没有被初始化!
var->ptr[0] = &a;
Run Code Online (Sandbox Code Playgroud)
如果你的编译器支持它,不应该更像这样:
typedef struct{
int size;
int* ptr[0];
}foo;
Run Code Online (Sandbox Code Playgroud)
否则,更改ptr[0]到ptr[1],并据此调整的事实已经结构包括一个元素的计算.
注意:写入错误的地址后,结果将是未定义的.你有一个问题但它只会出现在一个案例中.在这两种情况下,问题仍然存在.