gpt4 book ai didi

c++ - 使用 delete 调用析构函数时出现调试错误

转载 作者:行者123 更新时间:2023-11-28 06:10:18 30 4
gpt4 key购买 nike

我有以下代码:

#include <iostream>
using namespace std;
class MyString {
private:
char* Buffer;

public:
MyString(const char* InitialInput){
if(InitialInput){
Buffer = new char[strlen(InitialInput + 1)];
strcpy_s(Buffer, strlen(InitialInput) + 1, InitialInput);
} else { Buffer = NULL; }
}
~MyString(){ if(Buffer){ delete Buffer; } }

int GetLength(){ return strlen(Buffer); }
const char* GetString() { return Buffer; }
};

void UseMyString(MyString const& Input) {
cout << "String buffer in MyString is " << Input.GetLength() << " characters long." << endl;
cout << "Buffer contains: " << Input.GetString() << endl;
}

int main(){
MyString SayHello("Hello from String Class");
UseMyString(SayHello);

return 0;
}

http://i.stack.imgur.com/Pl4Nz.jpg

创建了两个具有不同 char* Buffer 的对象。但是,它无法删除缓冲区。如果我注释掉

    if (Buffer != NULL)
delete Buffer;

程序运行完毕。那为什么会这样呢?

最佳答案

如果您使用 buffer = new char[length] 分配内存,您应该使用 delete[] buffer; 释放内存;

但是你的代码还有其他问题。你为什么不想简单地使用 std::string ?它肯定会更有效率......

我也无法编译您的代码(我不使用 Windows),但我在 strcpy_sstrlen 方面存在问题,并且在类型转换方面也存在问题。

关于c++ - 使用 delete 调用析构函数时出现调试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31398384/

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