繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM