【发布时间】:2014-11-24 11:02:33
【问题描述】:
我有这段代码用于将标量乘以 n 维向量;它编译但崩溃了,我不知道出了什么问题,有什么想法吗?
#include <stdio.h>
int main()
{
int i,n,A[n]; float k,B[n];
printf ("\n Enter vector dimension \n");
scanf ("%d",&n);
for (i=1; i<n+1; i++)
{ printf ("\n Enter a%d",i);
scanf ("%d", &A[i]);
}
printf ("\n Enter value of scalar \n");
scanf ("%f", &k);
for (i=1; i<n+1; i++)
{B[i]=k*A[i];
}
for (i=1; i<n+1; i++)
{ printf ("\n B[%f]=%f",i,B[i]);
}
getch();
return 0;
}
【问题讨论】:
-
C 数组从偏移量 0 开始,而不是从 1 开始 - 以
for(i=0; i<n; i++)进行循环 -
int i,n,A[n];此时,n的值是多少?或者它甚至是已知的?那么,A[n]的大小是多少?您是否希望它足够大以容纳稍后在初始化n时输入的项目(但A的大小没有发生任何变化)? -
它崩溃是因为写入 A[n] 正在写入数组边界之外的内存位置。
-
同理,
B的大小是多少? -
@PaulRoub -- 正确 -- 在声明 A[n] 时未定义 n -- 所以这也不起作用。