C++ 删除cpp中的指针和新运算符

C++ 删除cpp中的指针和新运算符,c++,pointers,new-operator,delete-operator,assertion,C++,Pointers,New Operator,Delete Operator,Assertion,只有在使用新指针时,我才能删除指针吗? 我试过这样的代码: std::vector<float>* intersections; intersections=&KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints); delete intersections; 感谢您对示例代码的支持int*p=new int[2];删除p,您创

只有在使用新指针时,我才能删除指针吗? 我试过这样的代码:

std::vector<float>* intersections;

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

    delete intersections;

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

参见CPluPlus参考:

同时,我知道你在问上面的代码块。由于未使用
运算符new
分配对象,因此不应使用
运算符delete
运算符delete[]
取消分配对象。这是你的问题

如果要取消分配此对象,可能需要使用
free()
取消分配此对象。您需要检查代码或其文档以确定


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

请注意“交集=&…”您正在获取返回值的地址,这并不意味着您是它的所有者

我想你应该这么做

std::vector<float> & intersections=KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);
std::vector&crossions=KIN_三角法::getIntersectionCircleAndLine(xA,yA,xB,yB,x,y,半径*2,nbPoints);
或许

std::vector<float>  intersections=KIN_Trigonometry::getIntersectionCircleAndLine( xA, yA, xB, yB, x, y, radius * 2, nbPoints);
std::vector crossions=KIN_三角法::getIntersectionCircleAndLine(xA,yA,xB,yB,x,y,半径*2,nbPoints);

您必须检查get函数的签名

您不能在第一条语句中删除
交叉点
,因为交叉点(就我们在这里看到的)没有分配的空间,它只是指向地址的链接。因此,您必须使用
new
将内存空间分配给
交叉点
,然后删除此内存空间。

此代码甚至不应编译

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

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

删除[]的结果肯定不是这样。新[]未分配std::vector。它不是C++的“数组”,而是一个对象。这个答案实际上是指他的示例代码<代码> int *p=新int(2);删除p啊,是的-但是他的例子与他的问题没有关系。他获取返回值的地址,然后进行删除-如果OP询问,则不应使用
delete
delete[]
,这样做没有任何好处。要么
getIntersectionCircleAndLine
返回对成员变量的引用(在堆栈上,最有可能是选项),要么它分配内存,返回指向它的指针,但随后决定管理它的内存(即调用
delete[]
)。不管怎样,双重删除正在发生,你可能不应该这样做,谢谢你!我也这么认为,我不明白为什么对我的主题投反对票……你能展示一下Kinu三角函数的签名吗::getIntersectionCircleAndLine函数?静态std::vector getIntersectionCircleAndLine(float xl,float yl,float xl2,float yl2,float xC,float yC,float r,int circlesPoints)@sachaamm,它没有编译,你是怎么编译的?是的,谢谢,但我正在使用几种方法通过静态方法获取浮点返回向量,一切都很好,但是当我尝试获取交点的大小时,我遇到了错误:错误5错误C3867:'std::vector::size':函数调用缺少参数列表;使用“&std::vector::size”创建指向成员的指针,该指针甚至不应编译。@sachaamm:这是不相关的。您可以通过添加()来修复它:
size\t sz=crossions.size()
@MSalters:没错,这是itit使用Visual Studio 2013编译的,但当我尝试从交点(如向量的大小)获取任何内容时,会出现错误。kinu三角()是一个静态向量(我不知道它是否重要?)std::vector*intersections2;//*intersections2=std::vector();//这会导致中断错误intersections2=&Kinu三角::getIntersectionCircleAndLine2(a.x,a.y,B.x,B.y,x,y,半径*2,nbPoints);//编译库特
intersections = &KIN_Trigonometry::getIntersectionCircleAndLine(...);