您的位置:首页 > 其它

程序调试中的常见问题及解决方法

2017-09-09 08:55 465 查看

1、CE(Compile Error)编译错误

其实很多时候通过返回的错误信息就能找出错误。

①缺失符号,如下图



第一句Error表示在“printf”前少了一个分号,

第二句Error表示在“return”前少了一个分号。

通常在错误行的上一行找缺失的分号。比如,

int main()
{
int sas   //here;
printf("%d",a[7]);
if(1)
a[0]=1   //here;
return 0;
}
[/code]

根据代码和上面图片的信息,很容易判断错误在哪。

②缺失参数

比如这样:

void f(int a)
{
......
}
int main()
{
f();
return 0;
}
[/code]

就会有这样的错误信
4000
息返回:

[Error] too few arguments to function ‘void f(int)’

说明我们在使用函数时给予的参数过少。

③如果使用了STL,并且是STL相关语句CE,那么错误信息可能很复杂。

但是不要怕,错误可能并不是多么复杂。

所以下面说一个sort常见的问题。

#include<cstdio>
#include<algorithm>
using namespace std;
struct A
{
int v,c;
}a[15];
int main()
{
for(int i=1;i<=10;i++)
scanf("%d",&a[i]);
sort(a+1,a+11);
}
[/code]

然后就CE 了··· 而且错误信息辣么多QAQ

还会跳出来一串代码:

template<typename _RandomAccessIterator>
void
__insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last)
{
if (__first == __last)
return;

for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
{
if (*__i < *__first)
{
typename iterator_traits<_RandomAccessIterator>::value_type
__val = _GLIBCXX_MOVE(*__i);
_GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
*__first = _GLIBCXX_MOVE(__val);
}
else
std::__unguarded_linear_insert(__i);
}
}
[/code]

看不懂啊QAQ

不过没关系,我们知道错误行是这个:

if (*__i < *__first){···}

啥意思呢?想想sort是用来干什么的?排序,对吧。而我们的a是一个结构体,里面包含着c,v两个数。

于是就得出结论:程序不知道按什么来排序了。

怎么办呢?手写cmp函数。

如果想按c排序,就这样:

bool cmp(A a,A b)
{
return a.c<b.c;
}
[/code]

然后把sort改一下:

sort(a+1,a+11,cmp);

就这样,编译通过!

2、RE(Running Error)运行时错误



图有点大=V=

具体来说有以下解决方法:

①检查在scanf中是否加入了%、&等必要符号。

②检查数组是否越界(数组下标为负数、数组下标过大)。

③如果使用了STL,请认真检查与STL相关的语句,不管是函数还是数据结构。

④如果使用了指针,检查指针是否初始化为NULL。

⑤检查是否递归了太多次,导致爆栈。

3、WA(Wrong Answer)

先想想自己算法的正确性吧。

算法没错?看下面:

一、程序输出了意料之外的结果,如0、极大值。

①是不是数组没有赋初值?

②是不是访问了非法内存(有时访问非法内存不会RE)?

③循环次数是否远远超过或低于预期?

④是不是爆int了?

二、程序输出的结果与推算的不一致,但差别不大。

①看看有没有把初值赋错。

②看看有没有把“==”写成了“=”。

③看看有没有弄混“>”“<”“>=”“<=”

④变量类型对不对?输出类型对不对(如scanf(“%c”,(int)a);)?

三、熟练运用调试功能。

不一定要打开调试面板调试,输出中间变量也是一个很好的方法。

通过对比一个(或多个)关键变量在程序中的变化与预期变化的差距,往往能发现问题。

4、AC(Accepted)

那你很棒棒哟!⊙v⊙

嘛,以后还会更新的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐