编译以下程序时出现“Ej4.exe已停止工作”。我可以用调试器找到错误吗?我从来没有使用过它,想知道它在哪些情况下使用以及如何使用。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int findMaxElem(int []);
int main(){
int arr1[MAX],mxelem,i,n;
printf(" Ingrese el numero de elementos a almacenar en el arreglo :");
scanf("%d",&n);
printf(" Ingrese %d elementos en el arreglo:\n",n);
for(i=0;i<n;i++)
{
printf(" elemento - %d : ",i);
scanf("%d",&arr1[i]);
}
mxelem=findMaxElem(arr1);
printf(" El maximo elemento en el arreglo es: %d\n\n",mxelem);
return 0;
}
int findMaxElem(int arr1[])
{
int i=1,mxelem,n;
mxelem=arr1[0];
while(i < n)
{
if(mxelem<arr1[i])
mxelem=arr1[i];
i++;
}
return mxelem;
}
答案 0 :(得分:4)
在另一个函数findMaxElem()
中,您使用了未初始化的n
。因此,您有未定义的行为 - 以及使您的程序停止的未定义行为。 (也许垃圾值使您访问超出范围的数组访问)。这里n
未初始化。将n
从main
传递给此函数。
mxelem=findMaxElem(n,arr1);
并使用它
int findMaxElem(int n, int arr1[])
{
int i=1,mxelem;
mxelem=arr1[0];
while(i < n)
{
if(mxelem < arr1[i])
mxelem = arr1[i];
i++;
}
return mxelem;
}
>>gcc -g prog.c -o prog.x
>>gdb prog.x
(gdb) run
..
然后每次运行它都会返回0
- 元素。出了点问题。最重要的功能是findMaxElem
我在那里放了一个断点。
(gdb) break findMaxElem
...
(gdb) run
现在它在我到达那里之后就停止了(我的意思是在给出输入之后)。
Breakpoint 1, findMaxElem (arr1=0xbffff1e8) at prog.c:30
30 int i=1,mxelem,n;
(gdb) next
31 mxelem=arr1[0];
(gdb) print mxelem
$3 = 1 <-- for me first element entered was 1
(gdb) next
32 while(i < n)
(gdb) print i
$4 = 1
(gdb) print n
$5 = -2147475456 <---- this gave me the idea that it is the error over here.
(gdb)
所以答案是肯定的。您可以使用调试器找出问题所在。您没有提到您使用的调试器,但我已经使用gdb
向您展示了一个小的调试步骤。