[英]shared pointer of dynamically allocated int array triggered a breakpoint
在此先感谢您提供帮助的人。 我是C ++的新手。 我正在学习智能指针/共享指针的概念,并使用Visual Studio 2013RC。 按照Wikipedia中的示例,我创建了这样的共享指针
SharedPointer.cpp
#include <iostream>
#include <memory>
//using namespace std;
void main(){
std::shared_ptr<int> sp1(new int(5), std::default_delete<int[]>());
//std::shared_ptr<int> sp2 = sp1;
for (int i = 0; i < 5; i++) sp1.get()[i]= i;
for (int i = 0; i < 5; i++) std::cout << sp1.get()[i] << std::endl;
system("pause");
}
该程序编译并打印出0、1、2、3、4,没有任何错误,但是随后出现窗口,提示“ SharedPointer.exe触发了断点”。
谁能告诉我此异常的原因是什么?
非常感谢
您应该在这里使用int[5]
而不是int(5)
:
std::shared_ptr<int> sp1(new int[5], std::default_delete<int[]>());
当前,您的代码分配了一个初始化为5
int
,然后尝试将其作为5个int
的数组(未定义行为)进行访问。 此后,智能指针尝试使用delete[]
运算符(而不是“普通” delete
运算符)删除该int
,这也是未定义的行为。
sp1
在程序末尾被销毁,导致默认删除程序运行。 默认的删除器在这里调用delete[]
,但是由于您没有使用new[]
,所以这是无效的。
实际上,从外观上看,您的意思是new int[5]
而不是new int(5)
,因为您还试图访问该内存块的五个元素,而实际上您只分配了一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.