编译以下程序时出现“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;
}
最佳答案
在另一个函数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
的一个小调试步骤。
关于c - "Ej4.exe has stopped working"– 如何使用调试器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082267/