固定大小的新矢量会导致崩溃

时间:2015-06-17 14:58:48

标签: c++ vector allocation

问题

在创建具有固定初始大小的新矢量(指针)时,我出现了一个随机出现的问题。

std::vector<double> * ret = new std::vector<double>(size);

有时导致我的程序崩溃,我真的不知道为什么......可能是堆栈损坏?我遗憾地找不到任何可能导致网络问题的解释。

示例:

代码

// <- ... Some independant code
// [size] is an unsigned int passed as parameter to the function
cout << size << endl;
std::vector<double> * ret = new std::vector<double>(size);
cout << "Debug text" << endl;
// More code ... ->

编辑:我会尽快更新代码,以便根据以下内容获得正确的问题:How to create a Minimal, Complete, and Verifiable example

输出

  

100

...然后崩溃(未打印跟踪"Debug text"size正确)
我尝试将关键代码行放在try catch中,就像有些人建议的那样(对于与内存相关的错误),但是没有异常被捕获,我仍然得到了崩溃。
此代码位于一个多次调用的函数内(具有size的各种值,始终在11000之间),有时函数最终没有问题,有时不会({的值{1}}似乎没有任何影响,但也许我错了)。

我的解决方案&#34; (你可以跳过这一部分)

我调整了我的代码,使用指向矢量而没有初始大小的指针

size

我使用std::vector<double> * ret; 代替push_back()[]我的算法更快,因为矢量首先被填充(元素顺序很重要,我从外部文件获取位置,但我仍然需要一个向量,而不是代码后面的动态方面的数组),但我改编了一切使用[](在我的情况下效率较低,因为我现在需要更多的迭代,但没有任何关键)。

问题

简而言之:有谁知道可能导致问题的原因或我如何潜在地追踪导致此问题的原因?

2 个答案:

答案 0 :(得分:1)

看起来你的程序停止崩溃不是因为你创建了一个没有大小的向量,而是因为你使用了push_back()。将operator[]替换为push_back()这一事实可以消除您在其他地方访问某个向量中的元素超出范围的症状点,从而破坏您的记忆并突然崩溃。检查您访问数据的代码。

答案 1 :(得分:0)

正如您所写,似乎您正试图使用​​ret[...]权限访问它:-)?抱歉我的笑容,但是当您使用指向矢量的指针时会发生这种情况......

如果是这种情况,则需要将其替换为(*ret)[...]