动态分配的int数组的共享指针触发了一个断点

cga*_*gao 1 c++ shared-ptr visual-studio-2013

在此先感谢帮助的人们.我是C++的新手.我正在学习智能指针/共享指针的概念并使用Visual Studio 2013RC.按照维基百科中的示例,我创建了一个像这样的共享指针

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");
}
Run Code Online (Sandbox Code Playgroud)

该程序编译并打印出0,1,2,3,4没有任何错误,但随后出现了"SharedPointer.exe触发断点"的窗口.

谁能告诉我这个例外的原因是什么?

非常感谢

das*_*ght 5

你应该用int[5]而不是在int(5)这里:

std::shared_ptr<int> sp1(new int[5], std::default_delete<int[]>());
Run Code Online (Sandbox Code Playgroud)

目前,您的代码分配了一个int初始化为的单个5,然后它尝试将其作为五个数组int(未定义的行为)进行访问.之后,智能指针尝试int使用delete[]操作符(而不是"普通" delete操作符)删除它,这也是一个未定义的行为.