相关疑难解决方法(0)

尝试用C语言中的catch语句

我今天想到了另一种语言中存在的try/catch块.谷歌搜索了一段时间,但没有结果.据我所知,在C中没有try/catch这样的东西.但是,有没有办法"模拟"它们?
当然,有断言和其他技巧,但没有像try/catch,也可以捕获引发的异常.谢谢

c

94
推荐指数
7
解决办法
18万
查看次数

捕获访问冲突异常?

int *ptr;
*ptr = 1000;
Run Code Online (Sandbox Code Playgroud)

我可以使用标准C++捕获内存访问冲突异常,而无需使用任何特定的Microsoft.

c++ exception-handling

80
推荐指数
6
解决办法
10万
查看次数

C++和Java中的异常处理之间的区别?

在Java中,如果特定的代码行导致程序崩溃,则捕获异常并继续执行程序.

但是,在C++中,如果我有一段导致程序崩溃的代码,例如:

try
{
    int x = 6;
    int *p = NULL;
    p = reinterpret_cast<int*>(x);

    *p = 10; // the program crashed here

    cout << "x = " << *p << endl;
}
catch(const char* Message)
{
    cout << "There is an run-time error";
}
Run Code Online (Sandbox Code Playgroud)

然后程序仍然崩溃,并且没有捕获异常.

那么C++中的异常处理有什么意义呢?我误会了什么吗?

c++ java exception-handling

23
推荐指数
2
解决办法
8824
查看次数

构造函数的初始化列表中的异常处理

在我的项目中,我找到了一段代码,其中一个方法在构造函数的初始化列表中被调用.

Test2(Test* pTest):m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
    {
    }
Run Code Online (Sandbox Code Playgroud)

我发现Test2的用户可能会将NULL传递给构造函数.由于指针在未经验证的情况下使用,因此存在访问冲突的可能性.

这引发了我在构造函数的初始化列表中查看异常处理.我在其中一篇文章中发现尝试可以在初始化列表中使用.我写了一个小测试程序来测试这个概念:

//Test class stores the unique ID and returns the same with API getTestID
class Test
{
public:

    Test(int nID):m_nID(nID){
    }

    int getTestID() const
    {
            return m_nID;
    }
private:
    int m_nID;

};


class Test2
{
public:

    Test2(Test* pTest) 
        try :m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
    {
    }
    catch (...) 
    {
        cout<<"exception cought "<< endl;
    }

    void printDupID()
    {
        cout<<"Duplicate ID" << m_nDuplicateID << endl;
    }
private:

    Test* m_pTest;
    int m_nDuplicateID;
};

int main(int argc, char* argv[])
{ …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling

5
推荐指数
2
解决办法
8952
查看次数

在恢复应用后,TextureView抛出致命信号11

我有一个基于Romain Guy的例子的TextureView,可以在这里找到.在Android 4.3和4.4上,经过几轮暂停和恢复应用程序后,应用程序崩溃,唯一的错误痕迹是LogCat中的致命信号11.我创建了一个测试应用程序,它使用Romain Guy的确切代码来查看它是否是我在代码中所做的事情,而Romain的代码也与致命信号11一起崩溃.

我已经确定,如果我使用Handler而不是Thread运行代码,它似乎不会使应用程序崩溃.Handler应该在主UI线程上运行(或者至少我相信它),这可能暗示它是一个线程问题.

我还确定在调用canvas.drawX(drawColor,drawBitmap,drawRect等等)期间发生了崩溃.锁定和解锁画布似乎不是问题.我怀疑线程正在被取消,而其他一些代码仍在使用画布,但由于缺少任何真正的异常并且崩溃相当不一致,我很难跟踪问题.

任何见解将不胜感激.

android textureview

5
推荐指数
1
解决办法
1177
查看次数

使main()"不可见"

我想编写一个守护程序管理器来管理所有守护程序正在运行,就像这样(简化的伪代码):

void watchMe(filename)
{
    while (true)
    {
        system(filename); //freezes as long as filename runs
        //oh, filename must be crashed. Nevermind, will be restarted            
    }
}       

int main()
{
    _beginThread(watchMe, "foo.exe");
    _beginThread(watchMe, "bar.exe");
}
Run Code Online (Sandbox Code Playgroud)

这部分已经工作 - 但是现在我面临的问题是,当观察到的应用程序 - 比如说foo.exe - 崩溃时,相应的系统调用会冻结,直到我确认这个漂亮的消息框:

错误消息

这使守护进程无用.

我认为可能是一个解决方案是使观察到的程序(我控制)的main()"不可擦除",这样他们就可以优雅地关闭而不显示这个丑陋的消息框.

像这样:

try
{
    char *p = NULL;
    *p = 123; //nice null pointer exception
}
catch (...)
{
    cout << "Caught Exception. Terminating gracefully" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它仍然会产生此错误消息:

错误消息

("未经处理的异常...写入访问冲突......")

我已经尝试了SetUnhandledExceptionFilter和所有其他东西,但没有效果.

任何帮助将受到高度赞赏.

电贺

c++ exception-handling

4
推荐指数
1
解决办法
453
查看次数

C++如何捕获异常?

我试图抓住指针异常.我的代码看起来像这样.我得到"未处理的例外".我做错了什么?任何帮助将不胜感激.

 #include <iostream>
 #include <exception>

using namespace std;

struct Node{
    int data;
    Node* next;
};

int list_length(struct Node* head){
    try{
        int i = 0;
        while (head->next){
            head = head->next;
            i++;
        }
        return i + 1;
    }
    catch (exception& e){
        cout << e.what() << endl;
    }
};

int main(void){

    struct Node *perr = nullptr;
    list_length(perr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling

0
推荐指数
1
解决办法
87
查看次数

标签 统计

c++ ×5

exception-handling ×5

android ×1

c ×1

java ×1

textureview ×1