如何解决为什么访问可变长度数组元素时此代码崩溃?
如果我要给出10个元素,则将how_many
扫描为10。
但是,一旦我输入第三个值,程序就会崩溃并返回一些长负值。我不知道问题出在哪里。
int main()
{
int how_many,k;
int data[how_many];
printf("Enter the number of values to be sorted..: ");
scanf("%d",&how_many);
printf("Enter the values one by one..:\n");
for (k=0;k<how_many;k++)
{
scanf("%d",&data[k]);
printf("data[%d]=%d\n",k,data[k]);
}
return 0;
}
解决方法
定义int data[how_many]
时,变量how_many
仍未初始化。
仅在之后定义arrey,即可从用户那里获得该值,但前提是scanf成功且该值为正。
int how_many,k;
printf("Enter the number of values to be sorted..: ");
if ( scanf("%d",&how_many) && how_many > 0 )
{
int data[how_many];
/* ... */
}
但是VLA(可变长度数组)有点危险:如果用户插入2000000000怎么办?您还必须检查一个合理的最大值:
#define MAX 1000
/* ... */
if ( scanf("%d",&how_many) && how_many > 0 && how_many <= MAX )
{
int data[how_many];
/* ... */
}
这就是为什么自C11起已从标准中删除VLA的原因,在这种情况下它不是最佳选择。我建议只是静态定义数组
int data [MAX];
或动态:
int *data = malloc ( MAX * sizeof( int ) );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。