C++如何删除本地分配的字符数组

C++ how to delete local allocated char array?

本文关键字:分配 字符 数组 何删除 删除 C++      更新时间:2023-10-16

我写了一个函数,它接收一个char指针作为参数,然后构建一个新的动态分配的char数组,其中包含该参数char。然后,它返回新的char数组。这就是功能:

 char* read_string(char *pstr)
    {
        char *str;
        str = new char[strlen(pstr)];//allocate memory for the new char
        str[strlen(pstr)] = '';
        for(unsigned i=0;i<strlen(pstr);i++)//build the new char
            str[i]=pstr[i];
        return str;//then return it
    }

我主要有:

int main()
    {
        char *Pchar = read_string("Test");
        cout<<Pchar;// Outputs "Test"
        delete [] Pchar;//"Program received signal SIGTRAP, Trace/breakpoint trap." error
    }

我在main中声明了一个char指针,然后使其指向read_string函数返回的char数组。它输出我想要的东西,但如果我想释放内存,它会给我运行时错误。如果我不再需要使用Pchar,我该如何释放内存?

编辑:感谢大家提供的内容丰富的答案。我已经成功地解决了这个问题。

您需要分配更多的内存来为EOS字符分配空间:

str = new char[strlen(pstr)+1];

您的特定问题是一个错误:

str = new char[strlen(pstr) + 1];
//                         ^^^^ need one more for the ''
str[strlen(pstr)] = '';

一般来说,由于这是C++而不是C,因此最好返回一个智能指针,以便调用者知道指针的所有权语义是什么:

std::unique_ptr<char[]> read_string(char *pstr)
{
    std::unique_ptr<char[]> str(new char[strlen(pstr) + 1]);
    // rest as before
    return str;
}

错误的发生似乎是由于分配的字符串长度不正确。您必须使用以下记录来分配字符串

    str = new char[strlen(pstr) + 1];//allocate memory for the new char
    str[strlen(pstr)] = '';

的功能如下

char* read_string( const char *pstr )
{
    char *str;
    size_t n = strlen( pstr );
    str = new char[n + 1];//allocate memory for the new char
    strcpy( str, pstr );
    return str;
}