【发布时间】:2014-01-06 14:35:48
【问题描述】:
在我的项目中,我创建了 3 种不同的 typedef struct 类型:
typedef struct Point
{
float x;
float y;
float z;
} Point;
typedef struct Triangle
{
Point A;
Point B;
Point C;
unsigned char color[3];//RGB
} Triangle;
typedef struct Structure
{
Triangle* triangles;
unsigned int nt; //number of triangles in array
} Structure;
您可能已经注意到,Structure 类型有一个动态大小的 Triangles 数组,所以我还将在这里发布内存分配和释放函数:
Structure newStructure(unsigned int nt)
{
Structure S;
Triangle* tri = malloc ((nt) * sizeof(Triangle));
if (tri!=NULL)
{
S.triangles = tri;
S.nt = nt;
}
else S.nt = 0;
return S;
}
void delStructure (Structure S)
{
if (S.triangles != NULL) free (S.triangles);
}
然后我想创建一个函数,使用以下语法将Triangle 添加到当前的Structure:S = addTriangle(T,S)。这就是我所拥有的:
Structure addTriangle(Triangle T, Structure S)
{
Structure R = newStructure(S.nt+1);
int i=0;
while(i++<S.nt) R[0].triangles[i] = S.triangles[i];
R[0].triangles[S.nt] = T;
delStructure(S); //Is this necessary?
return R[0];
}
编译时不显示错误消息,但是当我使用该函数时,数组上的第一个 Triangle 会获得随机值。
更清楚地说,如果我在数组中有一个Structure S 和三角形T1 和T2,然后我使用S = addTriangle(T3,S),结果将是一个Structure 和以下Triangles 数组: {T?,T2,T3},其中T? 显然具有随机值。
为什么会这样?
【问题讨论】: