我是否必须删除指针才能使用new? 我尝试了这样的代码:
accessElem :: Int -> MyArray -> Maybe Char
accessElem i a = a ^? ix i
它让我断言失败...... 当我使用新的
时,我已经使用了带指针的删除std::vector<float>* intersections;
intersections=&KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);
delete intersections;
感谢您的支持
答案 0 :(得分:4)
对于示例代码int* p = new int[2]; delete p;
,您创建了一个新数组,因此您应该使用delete[]
而不是delete
请参阅cplusplus参考:operator delete[]
与此同时,我意识到你正在询问上面的代码块。由于您没有使用operator new
分配对象,因此您不应使用operator delete
或operator delete[]
来解除分配。那是你的问题。
有可能,您可能希望使用free()
取消分配此对象,如果您要取消分配它。您需要检查代码或其文档以确定。
基于你正在获取函数返回值的地址这一事实,我认为你根本不应该自己解除这个。
答案 1 :(得分:4)
注意&#39;交叉点=&amp; ....&#39;您正在获取返回值的地址,这不会使您成为其所有者。
我怀疑你应该这样做
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函数的签名
答案 2 :(得分:0)
您无法在第一个语句中删除intersections
,因为交叉点(据我们在此处可以看到)没有分配空间,它只是指向地址的链接。所以你必须使用intersections
为new
分配一个内存空间,然后删除这个内存空间。
答案 3 :(得分:0)
这段代码甚至不应该编译。
intersections = &KIN_Trigonometry::getIntersectionCircleAndLine(...);
尝试获取已返回临时的地址,这是禁止的。您要么使用非常糟糕的编译器编译代码,要么您没有向我们提供真正的代码。