【问题标题】:Exception Handling with pointer [closed]带指针的异常处理[关闭]
【发布时间】:2014-05-26 18:55:29
【问题描述】:

如何使用 try-catch 块处理这种情况下引起的异常。请帮忙 。谢谢

double **pDblArray = 0;
pDblArray = new double *[5000000];

for(int i=0; i<5000000; i++)


{
pDblArray [i] = new double [5000000];

}

cout << "Completed Allocated" << endl;

【问题讨论】:

  • 用什么方法修复它?除了使用newdelete 之外,您不必知道它有什么问题。使用 std::vector&lt;std::vector&lt;double&gt;&gt;boooooom 就可以了。
  • 欢迎来到 SO!当你说修复时,你是什么意思?
  • 问题是你试图分配近 200TB。
  • 如何使用异常处理修复此代码您在此处提供的信息无法解决!但是尝试分配double *[5000000] 可能是一个愚蠢的想法!
  • @EdS。你只是嫉妒,因为他的 Timex Sinclair 有这么多记忆!

标签: c++ exception exception-handling


【解决方案1】:

假设你有足够的内存:

try {
    std::vector<std::vector<double>> vec(5000000, std::vector<double>(5000000));
    // …
} catch (std::bad_alloc const& e) {
    // …
}

【讨论】:

  • 我确定这不是因为他很久以前就收到了bad_alloc。由于代码示例不完整,我只是假设他正在正确清理内存并处理手头的问题。
  • @EdS.,对,已编辑。
【解决方案2】:

我不知道内存分配溢出的特定异常的名称。查一下。

double **pDblArray = 0;
pDblArray = new double *[5000000];

try
{
    for (int i = 0; i < 5000000; i++)  
    {
        pDblArray [i] = new double [5000000];

    }
}
catch (std::bad_alloc const &e)
{
    cout << "Boom! " << endl;
}

【讨论】:

  • 例外是std::bad_alloccatch()是错误的。
  • try { /* ... */ } catch(){ /* ... */ } else // ... 甚至不会编译!我不知道,为什么这个答案被接受了(也许是恐慌接受?)?!?
  • 哈,我猜你不能删除已接受的答案。我试着至少把它清理一下......
猜你喜欢
  • 2021-11-08
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多