程序调试中的常见问题及解决方法【2017.9.27更新】

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;
    }

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

②缺失参数

比如这样:

void f(int a)
{
    ......
}
int main()
{
    f();
    return 0;
}

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

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

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

③语句不明确

例如我们在使用string的时候,想要把字符串a赋为“abcde”。

于是我们写成了这样:

string a=abcde;

错误信息:

[Error] ‘abcde’ was not declared in this scope

我们应该清楚这是什么原因,计算机认为“abcde”是一个变量,但我们认为它是一个字符串。

怎么处理呢?

加个双引号。

string a="abcde";
④函数类型不正确

int 类的函数就要返回一个int值,void函数就要直接return,搞错这个很容易出事的。

比如我们搞错了:

void f()
{
    return 1;
}

错误信息:

这里写图片描述

看起来好复杂,其实就是void函数return了int值。把return 1; 改成return;就好了


*如果使用了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);
}

然后就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);
    }
   }

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

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

啥意思呢?想想sort是用来干什么的?排序,对吧。而我们的a是一个结构体,里面包含着c,v两个数。
于是就得出结论:程序不知道按什么来排序了。
怎么办呢?手写cmp函数。
如果想按c排序,就这样:

bool cmp(A a,A b)
{
    return a.c<b.c;
}

然后把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⊙

嘛,以后还会更新的。

### 回答1: 在Visual Studio 2017配置OpenGL主要涉及以下几个步骤。 首先,确保你已经安装了正确的OpenGL库文件。最常用的OpenGL库是glew和freeglut。你可以从官方网站下载它们的安装包,并按照提示进行安装。 然后,创建一个新的Visual Studio项目。选择语言(C++或者C#)和适合的项目类型(如控制台应用程序或窗体应用程序)。 接下来,在项目属性进行一些配置。在解决方案资源管理器,右击你的项目名称,选择“属性”选项。点击“配置属性”下的“VC++目录”,在“包含目录”一栏添加OpenGL库文件的路径。例如,选择GLEW的安装路径,找到包含“include”文件夹的位置。 继续配置属性,点击“链接器”下的“常规”,在“附加库目录”一栏添加OpenGL库文件的路径。例如,选择GLEW的安装路径,找到包含“lib”文件夹的位置。 然后,在“链接器”下的“输入”一栏,添加OpenGL的库文件。在这里,你需要添加GLEW和freeglut的库文件名,以便链接器能够找到它们。例如,添加glew32.lib和freeglut.lib。 最后,在你的代码包含OpenGL的头文件,并编写你自己的OpenGL程序。 以上是在Visual Studio 2017配置OpenGL的基本步骤。根据不同的需求,可能还需要进行其他配置,例如设置窗口大小、显示OpenGL场景等。希望这些简要步骤能够帮助你进行OpenGL配置。 ### 回答2: 为了配置VS2017与OpenGL,您需要按照以下步骤进行操作: 1. 首先,在Visual Studio 2017创建一个新的项目。 2. 在“解决方案资源管理器”,右键点击项目名称,然后选择“属性”选项。 3. 在左侧面板,选择“配置属性”>“VC++目录”>“包含目录”。 4. 点击包含目录栏的编辑按钮,并添加OpenGL的包含路径。这是您安装的OpenGL库的文件夹的位置。 5. 接下来,返回到左侧面板的“配置属性”>“VC++目录”,这次选择“库目录”选项。 6. 点击库目录栏的编辑按钮,并添加OpenGL的库路径。这是您安装的OpenGL库文件的位置。 7. 然后,在左侧面板选择“链接器”>“输入”选项。 8. 在右侧面板的附加依赖项,点击编辑按钮,并添加OpenGL的库文件名。这些库文件名应该是您在OpenGL库找到的。 9. 然后,转到“C/C++”>“预处理器”选项。 10. 在右侧面板的预处理器定义,点击编辑按钮,并添加“WIN32”和“_DEBUG”(如果您正在使用调试模式)。 11. 最后,您可能还需要在您的代码包含OpenGL的头文件,并链接OpenGL的库文件。 完成这些步骤后,您的VS2017项目应该已经正确配置了OpenGL。您现在可以开始编写和运行基于OpenGL的图形应用程序了。记得在编译和运行之前检查您的代码是否正确引用了OpenGL的函数和常量。 希望这些信息对您有帮助。 ### 回答3: 在Visual Studio 2017配置OpenGL主要包括以下步骤: 第一步,下载和安装OpenGL库。首先,需要下载OpenGL库文件,并将其放置在合适的位置。一种常见的OpenGL库是GLEW(OpenGL扩展包),可以从GLEW的官方网站上下载。下载完成后,解压文件并将其放置在适当的位置,例如放在C盘的Program Files文件夹下。 第二步,配置Visual Studio 2017的项目属性。打开Visual Studio 2017,创建一个新的C++项目。然后,在“解决方案资源管理器”右键点击项目名称,选择“属性”选项。在属性窗口,点击“VC++目录”选项,然后选择“包含目录”。在包含目录添加OpenGL库的路径,例如添加GLEW库的路径(如:C:\Program Files\GLEW\include)。然后,点击“库目录”选项,在库目录添加OpenGL库的路径,例如添加GLEW库的路径(如:C:\Program Files\GLEW\lib)。 第三步,配置附加依赖项。在属性窗口,点击“链接器”选项,然后选择“输入”。在附加依赖项,添加OpenGL库的名称,例如添加GLEW库的名称(如:glew32.lib)。 第四步,设置预处理器宏。在属性窗口,点击“C/C++”选项,然后选择“预处理器”。在预处理器宏,添加宏定义“GLEW_STATIC”。 完成以上步骤后,即成功配置了Visual Studio 2017的OpenGL。此时可以编写OpenGL的代码,并使用OpenGL库进行开发和调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值