删除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 delete
或 operator 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(...);
试图获取返回的临时地址,这是被禁止的。你要么用非常糟糕的编译器编译代码,要么你没有给我们真正的代码。
我可以只在使用 new 时删除指针吗? 我试过这样的代码:
std::vector<float>* intersections;
intersections=&KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);
delete intersections;
它给我断言失败... 当我使用 new like
时,我已经使用了带指针的 deleteint* p = new int[2];
delete p;
感谢您的支持
对于您的示例代码 int* p = new int[2]; delete p;
,您创建了一个新数组,因此您应该使用 delete[]
而不是 delete
参见 cplusplus 参考资料:operator delete[]
同时,我知道你问的是上面的代码块。由于您没有使用 operator new
分配对象,因此您不应该使用 operator delete
或 operator 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(...);
试图获取返回的临时地址,这是被禁止的。你要么用非常糟糕的编译器编译代码,要么你没有给我们真正的代码。