是否有任何工具可以警告可能滥用删除或删除[]?

时间:2012-08-16 21:53:07

标签: c++ vector delete-operator scalar

我想我清楚删除和删除[]之间的区别。我在这里问的问题是:有时我确实有拼写错误并使用了错误的拼写错误。然后它可能会或可能不会崩溃,通常会花费数小时的调试时间。

我希望gcc可以在一些最简单的案例中检测并警告可能的误用。 由于我需要调用遗留函数,我仍然不得不经常使用“new float [size]”,因此我更感兴趣的是找到一个错误检查工具来捕获部分错误。

2 个答案:

答案 0 :(得分:4)

  

我希望gcc能够在一些最简单的情况下检测并发出警告。

使用valgrind

  

我仍然需要不时使用new float[size]因为我需要调用的遗留函数

不,你没有。如果遗留函数想要指向浮点数组的第一个元素的指针,请执行以下操作:

std::vector<float> numbers(10);
legacy_func(&numbers[0]);

不要这样做:

float *numbers = new float[10];
legacy_func(numbers);
delete[] numbers;

答案 1 :(得分:0)

您可以将自己的花车放在std::vector<float>中,然后将front()&front()传递给这些旧功能。我不确定这是否符合标准,但它应该在常见的实现中工作。

如果您拥有C ++ 11库支持并且在编译时已知size,则std::array<float, size>将更有效。