分段错误错误:同时减去两个数组

时间:2014-04-19 16:31:59

标签: arrays fault

我不能减去两个使用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();
}

2 个答案:

答案 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()中缺少右括号。我认为它只是一个错字)