【发布时间】:2016-11-05 00:19:49
【问题描述】:
我已经动态分配了一个代表一系列点的结构数组。但是,当我尝试为其成员分配值时,程序分配的值与预期的不同。我做错了什么?
程序的输出:
xy[0].x= 0
xy[0].y= 0
xy[1].x= 1
xy[1].y= 1
xy[2].x= 2
xy[2].y= 2
xy[3].x= 1041
xy[3].y= 0
代码:
#include <stdio.h>
#include <stdlib.h>
int n;
struct point{
int x,y;
};
typedef struct point Point;
void resize(Point*xy)
{
xy=(Point*)realloc(xy,sizeof(Point));
for (n=0;n<4;n++)
{
xy[n].x=n;
xy[n].y=n;
}
}
int main ()
{
Point *xy;
xy=(Point*)malloc(2*sizeof(Point));
for (n=0;n<2;n++){
xy[n].x=n;
xy[n].y=n;
}
resize(xy) ;
for (n = 0; n<4; n++) {
printf("xy[%i].x= %i \n",n,xy[n].x);
printf("xy[%i].y= %i \n",n,xy[n].y);
}
free(xy);
return 0;
}
【问题讨论】:
-
在
resize()中,你只有realloc()有足够的空间容纳一个结构......并将结果从参数列表中保存到xy,所以如果地址更改@中的xy987654327@ 仍将包含旧地址(尽管由于您正在缩小数组,realloc()可能会返回相同的地址)。 -
您应该将
Point **而不是Point *传递给resize(),或者返回Point *以分配回main()中的xy。 -
始终检查可能产生严重错误的函数的结果,例如
realloc。并且不要将malloc和朋友的结果投射到 C 中!
标签: c arrays dynamic struct structure