gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:35 25 4
gpt4 key购买 nike

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

共享指针.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[]>());

目前,您的代码分配了一个初始化为 5int,然后尝试将其作为包含五个 int 的数组进行访问>s(未定义的行为)。之后,智能指针尝试使用 delete[] 运算符(而不是“普通”delete 运算符)删除 int也是未定义的行为。

关于c++ - 动态分配的 int 数组的共享指针触发了断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com