删除cpp中的一个指针和new运算符

Delete a pointer in cpp and the new operator

我可以只在使用 new 时删除指针吗? 我试过这样的代码:

std::vector<float>* intersections;

    intersections=&KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);

    delete intersections;

它给我断言失败... 当我使用 new like

时,我已经使用了带指针的 delete
int* p = new int[2];
delete p;

感谢您的支持

对于您的示例代码 int* p = new int[2]; delete p;,您创建了一个新数组,因此您应该使用 delete[] 而不是 delete

参见 cplusplus 参考资料:operator delete[]

同时,我知道你问的是上面的代码块。由于您没有使用 operator new 分配对象,因此您不应该使用 operator deleteoperator delete[] 来释放它。那是你的问题。

很有可能,您可能想使用 free() 来释放这个对象,如果您要释放它的话。您将需要检查代码或其文档以确定。

基于您正在获取函数 return 值的地址这一事实,我认为您根本不应该自己解除分配。

请注意 'intersection = &....' 您正在使用 return 值的地址,这并不意味着您就是它的所有者。

我怀疑你应该这样做

std::vector<float> & intersections=KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);

或者也许

std::vector<float>  intersections=KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);

你必须检查 get 函数的签名

您不能在第一条语句中删除 intersections,因为交叉点(据我们在此处所见)没有分配 space,它只是地址的 link .所以你必须分配内存 space 到 intersections 使用 new 然后删除这个内存 space.

这段代码甚至不能编译。

intersections = &KIN_Trigonometry::getIntersectionCircleAndLine(...);

试图获取返回的临时地址,这是被禁止的。你要么用非常糟糕的编译器编译代码,要么你没有给我们真正的代码。