我有三角形的结构,用户必须输入他想要的三角形数量,然后为每个三角形填充数据 - 边的长度。然后程序以最大的长度写入边缘。 首先,我为三角形数组分配内存,然后用数据填充每个三角形,但我的程序从未将最后输入的三角形保存在数组中,并且我得到一些奇怪的数字作为最大边缘。这是我的代码
struct triangle
{
int a;
int b;
int c;
};
int getBiggestEdge(int a, int b, int c)
{
int max = a;
if(b>max) {max=b;}
if(c>max) {max=c;}
return max;
}
int maxEdge(struct triangle niz [], int br)
{
int i, najduza;
najduza = getBiggestEdge(niz[0].a, niz[0].b, niz[0].c);
for(i=1; i<=br; i++)
{
if(getBiggestEdge(niz[i].a, niz[i].b, niz[i].c) > najduza)
{
najduza = getBiggestEdge(niz[i].a, niz[i].b, niz[i].c);
}
}
return najduza;
}
int main()
{
int i, n, edge;
struct triangle* niz;
printf("Insert number of triangles: ");
scanf("%d", &n);
niz= (struct triangle*) malloc(n * sizeof(struct triangle));
if (niz == NULL)
{
printf("Error!");
return 0;
}
printf("Insert data for every triangle (a b c):n");
for(i=0;i<n;i++)
{
printf("Triangle: ");
scanf("%d %d %d", &niz[i].a, &niz[i].b, &niz[i].c);
}
edge = maxEdge(niz, n);
printf("Biggest edge is: %dn",edge);
free(niz);
return 0;
}
您使用 malloc(n * sizeof(struct triangle))
为 n 个数组元素分配空间,并使用以下内容为 n 个元素获取输入:
for(i=0;i<n;i++)
但通过以下方式访问 N+1 元素:
for(i=1; i<=br; i++)
在maxEdge
.这里br
的值为 n
,因此代码访问 n+1 个元素(从 0 到 n 索引),这些元素具有未定义的行为。
您在maxEdge
中使用了错误的索引:
for(i=1; i<=br; i++)
它应该是
for(i = 0; i < br; i++)
在主循环中,您正确地使用了它,但在函数中,您正在读取数组边界之外并获取未定义的数据。
不相关但值得一提的是,您不应该强制转换 malloc
返回的指针:
我是否施放了马洛克的结果?