字符数组的析构函数错误

Destructor for char arrays Error

本文关键字:错误 析构函数 数组 字符      更新时间:2023-10-16

我有以下代码:

class Class 
{
private:
    char* str;
public:
    Class(const char* src) 
    {
        str = new char[strlen(src)];
        strcpy(str,source);
    }
    ~Class() {
        delete [] str;
    }
};

main函数用某个字符串调用构造函数。退出时,运行时在析构函数上崩溃。错误信息是:

pointer being freed was not allocated

如何解决这个问题

看看使用std::string后,您的代码变得多么漂亮和安全:

class Class {
    std::string str;
public:
    Class(char const *src) : str(src) {}
};

并且您不需要担心删除内存,为末尾的字符分配+1字符空间等。

复制构造函数应该是这样的。

Class(const char* src) 
{
    str = new char[strlen(src) + 1];// +1 is missed in original code.
    strcpy(str,source); // copy and append ''
}

如果不能为char str数组分配内存,则必须检查指针是否为NULL。str为NULL,删除[]NULL指针-问题

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
class Class 
{
    private:
    char* str;
    public:
    Class(const char* src) 
    {
        str = new char[strlen(src)];
        if(str) {
            strcpy(str,src);
        }
    }
    char* getstr() { return str; }
    ~Class() {
        if(str) {
            delete [] str;
        }    
    }
};
int main() {
    Class te("sdfsn");
    printf("%s",te.getstr());
    return 0;
}