Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 帮助试抓_C++_Opengl - Fatal编程技术网

C++ 帮助试抓

C++ 帮助试抓,c++,opengl,C++,Opengl,我正在使用臀大肌振荡器,每隔一段时间EndContour()就会失败,所以我这样做: try { PolygonTesselator.End_Contour(); } catch (int e) { renderShape = false; return; } 为什么它仍然会崩溃,它应该正确地执行catch代码? 我怎样才能解

我正在使用臀大肌振荡器,每隔一段时间EndContour()就会失败,所以我这样做:

         try
        {
            PolygonTesselator.End_Contour();
        }
        catch (int e)
        {
            renderShape = false;
            return;
        }
为什么它仍然会崩溃,它应该正确地执行catch代码? 我怎样才能解决这个问题

谢谢

为什么它仍然会崩溃,它应该如此 正确执行catch代码吗?怎么 我能修好这个吗


最有可能的原因是,您实际上没有捕捉到正在抛出的内容。您确定
polyContentSelator.End_Contour()抛出一个int?

是否执行PolyContentSelator.End_Contour();崩溃还是抛出异常

注意,一个真正的“崩溃”(SeStEngt,非法指令等)不会在C++的意义上抛出异常。 在这些情况下,CPU触发中断——这有时也被称为异常,但与C++异常无关。

<>在C++中,你在一个真实的CPU上运行,而不是在一个虚拟机中,比如java,每个内存冲突都会导致语言执行,比如Null PoExtExpReor或ArayOutOfFunsExtExist.< /P>
在C/C++中,CPU异常/中断/陷阱由操作系统处理,并作为“信号”转发给进程。您可以捕获信号,但通常这对崩溃(SIGSEG、SIGILL、SIGFPU、etcc)没有帮助。

因为当异常到达时,您要做的就是将“renderShape”设置为false,我将重新编译以下代码:

     try
    {
        PolygonTesselator.End_Contour();
    }
    catch (...) // takes any type of exception
    {
        renderShape = false;
        return;
    }

当然,如果你真的不能将源代码修复为异常本身

如果您的程序在从位置0x000000000读取时出现消息
错误而失败,则它不是因为异常而失败,而是因为segfault。您可以使用该实用程序将SEGFULTS转换为可捕获的异常。查看他们的示例。

您将获得SEH异常或结构化异常处理。这些异常是在Windows C++之前的一个完全不同的系统中抛出的,并且不能被标准的C++ catch块捕获(MSVC确实提供了SEH捕获)。 P>可选地,如果你在UNIX上,内核也不使用C++异常。它使用信号。我不假装理解信号,因为我不为UNIX开发,但我很确信它们不是C++异常。 您违反了不能反引用空指针的硬件规则。通过异常或信号,您将获得操作系统级错误。你不能在C++的catch块中捕捉到这些东西。 < >编辑:如果在Windows上使用MSVC并拥有最近的编译器,则可以启用/EHA,这允许您捕捉结构化异常以及C++异常。我编写了以下代码,其功能如下所示:

int main() {
    std::string string = "lolcakes";
    try {
        Something s;
        int i, j;
        i = 0; j = 1;
        std::string input;
        std::cin >> input;
        if (input == "Structured")
            int x = j / i;
        else
            throw std::runtime_error("Amagad hai!");
    }
    catch(std::runtime_error& error) {
        std::cout << "Caught a C++ exception!" << std::endl;
    }
    catch(...) {
        std::cout << "Caught a structured exception!" << std::endl;
    }
    return main();
}
intmain(){
std::string string=“lolcakes”;
试一试{
有什么东西会让人恶心;
int i,j;
i=0;j=1;
std::字符串输入;
std::cin>>输入;
如果(输入=“结构化”)
int x=j/i;
其他的
抛出std::runtime_错误(“Amagad hai!”);
}
捕获(标准::运行时错误和错误){

如前所述,这是SEH的一个例外。
如果您使用的是Visual Studio,则可以将项目配置为在try/catch块中捕获SEH异常

项目属性>C/C++>代码 生成>启用C++异常> 是,但SEH除外

两件事:

    如果您在VC 6或更高版本下,使用“{ {}}”(ExtExtExeExtEdHuffer-Lead){}。它将捕获SE。只尝试捕获catch C++异常。
  • 我和GLU相处得很艰难,所以我可以告诉你:如果你能设定正常值,就设定它。但除此之外,它确实很稳定

读取位置0x000000000时出错为什么不尝试修复它,而不是使用try/catch语句?因为这是一个经过充分证明是坚如磐石的库,我想说缺陷在代码中。在所有这些异常之后,清楚地表明某些指针设置不正确(指向位置0x000…)请确保您为EndoSCONTROUND()的调用做好了准备,即,设置/初始化所有的东西,不留下任何指针。@阿尔多:在C++中,您可以抛出任何对象(它不必是从STD::异常)导出的。。这包括POD类型。因此,如果抛出int,则可能是cougt。我在启动新库时发现这是usfull。我所有的抛出都是int(都具有唯一值)。一旦我计算完所有内容,我将返回并根据需要创建适当的异常类(或重新使用标准类)你使用的是哪一个库?这似乎是C++ GLU库周围的某种C++包装。我怎么知道它扔什么?还不能找到它。我相信你可以检查Glu的文档。必须提到某个地方!在那个地方寻找可能的抛出。如果不存在,也许你应该重新考虑使用另一个库。这是不准确的。在他的情况下,省略号不会捕捉SEH异常,除非他明确定义它。值得一试。第二,正如我在评论中所说的,他实际上应该不尝试o修复它,从GLU的文档开始!第三,如果文档没有帮助,那么更有可能是他的代码中有缺陷,而不是库中有缺陷,这意味着要进行全面检查。因为他说这种情况“偶尔会发生”我敢打赌,在后台一定有某种事件/竞争条件没有得到正确处理。不要用catch(…)吞并所有异常这是一个错误的标志,在地毯下面是一个错误的程序。这是一个坏编程的标志。正确的。这就是我说的,当OP应该把原因修复到异常,所以他根本不需要尝试/捕获。小NITPICK:这取决于OS。在Windows上,访问违规确实被提高为可捕获的C++异常。y reason
try{…}catch(…){}
块在跨平台代码中异常有害。现在,引发的异常不是从
std::exception
派生的,因此如果你抓住了它,而不是吞下所有类型,