char数组的析构函数错误

时间:2014-07-10 19:54:12

标签: c++

我有以下代码:

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

我该如何解决?

3 个答案:

答案 0 :(得分:4)

使用std::string

看看您的代码变得更好,更安全
class Class {
    std::string str;
public:
    Class(char const *src) : str(src) {}
};

你不必担心删除内存,关于在末尾为\0字符分配+1字符空间等。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

如果os无法将内存分配给char str数组,则必须检查指向NULL的指针。 str为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("sdfs\n");
    printf("%s",te.getstr());
    return 0;
}