c++ - 通过引用 c++ 删除对象

标签 c++ memory-management

我遇到了今天无法解释的问题。

int main(){
    vector<int> vec = subroutine();
    ...
    delete(&vec);
}

vector<int>& subroutine(){
    vector<int>* vec = new vector<int>();
    //Init the vec
    for(int i=0;i<vec.size();i++){
    ...
    }
    return *vec;
}

它出现了一个错误:

double free or corruption (out): 0X00007fffa145ff50

肯定是线路的问题:

delete(&vec);

但是我就是解释不通,为什么会有double free?

最佳答案

您正在对未使用 new 分配的内容调用 delete,因为您正在制作新 vector 的拷贝。您可以通过不复制 vector 来“更正”您的代码:

vector<int>& vec = subroutine();

不过这种功能真的是自找麻烦。解决此问题的正确方法是按值返回 vector 。

vector<int> subroutine() {
    vector<int> vec;
    //Init the vec
    for(int i=0;i<vec.size();i++){
    ...
    }
    return vec;
}

关于c++ - 通过引用 c++ 删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492699/

相关文章:

c++ - 使用 SSE 内在函数将 boolean 数组(8 字节 boolean )转换为 int 或 char

java - 无法为 Java 分配足够的堆空间

c# - 进程峰值内存使用的类型

ruby-on-rails - 如何解释内存使用数据?

web-services - 我应该从 Web 服务调用中释放自动实例化的 Delphi 对象吗?

C++:使用 std::vector::reserve 减少保留空间

c++ - 画一条线或许多点之间的区别

c++ - MOG 和 GMM 算法之间有区别吗?或者是一样的吗?

c++ - 内存中着色器的数量在多大程度上影响性能?

php - 如何在 C++ 中使用 cURL 让用户输入 URL 的搜索词?