当程序自身运行正常但在调试模式下它会产生SIGSEGV分段错误时意味着什么

时间:2014-10-05 00:24:36

标签: c++ debugging codeblocks

我有一个程序可以自己运行良好,我正在尝试学习使用调试器。当我使用调试器(在Code :: Blocks中)运行它时,我得到一个SIGSEGV通知。有谁知道这些症状会导致什么问题?

以下是代码:

    font = new Picture("font.png");
    glBindTexture(GL_TEXTURE_2D,font->texID);
    int w,h;//because it requires ints
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
    fontTexW = w;
    fontTexH = h;
    glBindTexture(GL_TEXTURE_2D,NULL);
    std::ifstream widths;
    widths.open("fontWidths.txt");
    std::string line;
    std::string num;
    for(int i = 0;i < 95;i++)
    {
        std::getline(widths,line);
        int j = 0;
        num = "";
        while(line[j] != ',') //this is where the arrow stops
        {
            num.push_back(line[j]);
            j++;
        }
        fontLocs.push_back(Point(atoi(num.c_str()),0));
        num = "";
        j++;//avoid comma
        while(j < line.size())
        {
            num.push_back(line[j]);
            j++;
        }
        fontWidths.push_back(atoi(num.c_str()));
    } 

感谢您的帮助。

编辑:我刚刚意识到这是我的程序第一次尝试从没有加载SOIL(OpenGL纹理加载)的东西中读取。它可能与文件加载有关吗?

1 个答案:

答案 0 :(得分:0)

据我所知,调试器可以优化你的std :: string,这样size()就不会像以前那样使用它了。尝试省略size()函数并再次检查