我不能减去两个使用malloc声明的数组。问题是什么?
#include<stdio.h>
#include<conio.h>
void main()
{
float *a,*b,*c;
int i;
a=(float*)malloc(8*sizeof(float));
b=(float*)malloc(8*sizeof(float));
c=(float*)malloc(8*sizeof(float));
a[1]=8.0;a[2]=9.0;a[3]=1.0;a[4]=2.0;a[5]=0.0;a[6]=8.0;a[7]=18.0;a[8]=2.0;
b[1]=10.0;b[2]=1.0;b[3]=13.0;b[4]=0.0;b[5]=100.0;b[6]=1.0;b[7]=20.0;b[8]=0.0;
for(i=1;i<=8;i++)
{
c[i]=a[i]-b[i];
printf("%d",c[i];// IAM GETTING ERROR HERE
}
getch();
}
答案 0 :(得分:1)
a = (float*)malloc(8*sizeof(float));
这将分配8个连续的块,每个块的大小等于float的大小,并返回指向第一个块的指针,每个块的值可以作为
访问 a[0], a[1] ,..., a[7]
要么
*(a), *(a+1), ..., *(a+7)
在你的代码中,我可以看到[8],b [8],c [8],修改你的代码从 0到7 而不是从 1到8 强>
答案 1 :(得分:0)
Gautam似乎已经在评论中回答了你的问题,我想让它更清楚。
分段错误几乎总是由于不适当的内存使用,在你的情况下,罪魁祸首是c [8]。 请记住,在像C这样的语言中,你从0开始计算,也就是说,如果数组的长度是8,它的索引应该是0,1,...... 7.实际上,索引更像是偏移;第一个元素不需要任何偏移,因此索引为0,第二个元素需要添加一个偏移量(数组元素的大小),第三个需要两个,第四个需要三个,等等。
对于malloc():应该最终释放分配的每个内存块以避免内存泄漏。在你的情况下,为什么不直接声明三个长度为8的数组呢?这样就不用担心这些了。</ p>
格式字符串:&#34;%d&#34;用于打印小数,而&#34;%f&#34;适用于花车。如果你想在屏幕上看到浮点数&#34;%f&#34;是你应该去的。 (也就是你的printf()中缺少右括号。我认为它只是一个错字)