codeblocks调试:debug版出现错误,release版可以正常运行

来源:互联网 发布:出名的网络暴力事件 编辑:程序博客网 时间:2024/06/07 20:26

编程新手遇到新问题: 

        在调试一个程序时,遇到一个怪问题,release版可以正常运行,而debug版出现错误提示:

Program received signal SIGSEGV,Segmention fault.

网络上找到sigsegv的含义, 
具体到代码,

SIGSEGV是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。SIGSEGV的符号常量在头文件signal.h中定义。因为在不同平台上,信号数字可能变化,因此符号信号名被使用。通常,它是信号#11

    我的程序里执行了无效的内存引用。

具体到代码如下,

    switch (g_nSence)    {    case 0:        for(int h; h<=5; h++)        {            if(PtInRect(&rt[h],pt)&&g_bMoveOn[h])//bool MoveOn[]确定每个按钮的状态            {                SelectObject(mdc,btn2_bmp);                BitBlt(hdc,rtx,rty+36*h,112,36,mdc,0,36*h,SRCCOPY);                g_pMscBtn->Play(g_iVolume2);                g_bMoveOn[h]=false;            }            else if(!PtInRect(&rt[h],pt))            {                SelectObject(mdc,btn1_bmp);                BitBlt(hdc,rtx,rty+36*h,112,36,mdc,0,36*h,SRCCOPY);                g_bMoveOn[h]=true;            }        }        break;

以上代码错在for循环中,变量int h没有初始化,导致了无效的内存引用。

改正后,错误消除。


阅读全文
1 0
原创粉丝点击