C++ 具有固定大小的新向量会导致崩溃 问题

C++ 具有固定大小的新向量会导致崩溃 问题,c++,vector,allocation,C++,Vector,Allocation,在创建具有固定初始大小的新向量(指针)时,我遇到了一个随机出现的问题。 std::vector<double> * ret = new std::vector<double>(size); 我使用了push_back()而不是[]。 []对于我的算法来说更快,因为向量最初是如何填充的(元素顺序很重要,我从外部文件中获取位置,但我仍然需要一个向量,而不是一个数组,用于后面的代码中的动态方面),但我调整了所有内容以使用push_back()(在我的例子中效率较低,因为我现在

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

std::vector<double> * ret = new std::vector<double>(size);
我使用了
push_back()
而不是
[]
[]
对于我的算法来说更快,因为向量最初是如何填充的(元素顺序很重要,我从外部文件中获取位置,但我仍然需要一个向量,而不是一个数组,用于后面的代码中的动态方面),但我调整了所有内容以使用
push_back()
(在我的例子中效率较低,因为我现在需要更多的迭代,但没有什么关键)

问题:
简而言之:有人知道是什么导致了问题,或者我如何跟踪导致问题的原因吗?

看起来你的程序停止崩溃不是因为你创建了一个没有大小的向量,而是因为你使用了
push\u back()
。用
push\u back()替换
操作符[]
删除您在其他地方访问向量中超出边界的元素、损坏内存并突然使其崩溃的症状点。在访问数据的位置检查代码。

编写时,您似乎正在尝试使用
ret[…]访问它。
右:-)?对不起,我的微笑,但当你使用指向向量的指针时会发生这种情况


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

是否有人知道是什么导致了问题,或者我如何潜在地跟踪导致问题的原因,使用
gdb
跟踪问题。我真的很好奇,您为什么要
new
向量?(我问了9/10次,当我看到这一点时,这是出于一个不好的原因)你真的不应该
新建
标准容器。使用valgrind检查任何越界访问等。Tge崩溃是一种症状。原因很可能是在其他地方,可能是更早的,也可能是在完全不相关的代码中。启用内存检查和/或使用内存检查器。请注意,您发布的“最小代码”不能可靠地再现问题。实际上,我使用的是
(*ret)[…]
。崩溃出现在访问任何
ret
元素之前,正如崩溃之前所述,崩溃发生在使用[]访问
ret
元素之前。这是您以这种方式创建的第一个向量吗?@smagnan:您说过分配是在循环中的。除非崩溃发生在第一次迭代时,否则您已经在访问一个向量的循环中通过了一次,或者我错了吗?@Slava,不,不是第一次,所以您实际上可能是对的。可能是前一个向量上的损坏?我觉得奇怪的是,一个越界者本该在我的程序崩溃之前拒绝吗?@smagnan是的,这正是我的意思
// <- ... 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 ... ->
std::vector<double> * ret;