这些天我正在阅读 C Primer Plus,这是我在第 10 章中为编程练习 No.4 编写的代码,该代码在双类型数组中查找最大数的索引。我使用可变长度数组来手动指定数组大小:
#include <stdio.h>
int findmax(const double array[], int s);
//find the index of the largest number in the array
int main(void)
{
int size = 0; //size of the array
int index = 0; //index of the largest number
double num[size]; //the array holding double-type numbers
printf("Enter the size of the array: ");
scanf("%d", &size);
printf("Enter %d numbers: ", size);
for (int i = 0; i < size; i++)
scanf("%lf", &num[i]);
index = findmax(num, size);
printf("The index of the max number in the array is: %d\n", index);
return 0;
}
int findmax(const double array[], int s)
{
int index = 0;
double max = array[0];
for (int i = 0; i < s; i++)
if (array[i] > max)
{
max = array[i];
index = i;
}
return index;
}
这段程序可以正常编译,使用MinGW(假设程序文件名为prog.c):
gcc prog.c -o prog.exe -std=c99
当“大小”变量小于 5 时,程序运行良好。但是当我为“大小”变量输入 6 或更大的数字时,程序在运行时崩溃。
松散地翻译,错误信息是:
the memory 0x00000038 used by 0x77c1c192 could not be "written".
我试图消除可变长度数组的使用,程序似乎工作正常。但是我还是不知道原版哪里出了问题。