C++ 如何删除本地分配的字符数组?
C++ how to delete local allocated char array?
我编写了一个函数,它接收一个 char 指针作为参数,然后构建一个包含该参数 char.Then 的新动态分配的 char 数组,它 returns 新的 char 数组。
这是函数:
char* read_string(char *pstr)
{
char *str;
str = new char[strlen(pstr)];//allocate memory for the new char
str[strlen(pstr)] = '[=10=]';
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 function.It 输出返回的 char 数组,但如果我想释放它提供的内存me runtime error.How 如果我不再需要使用 Pchar,我可以释放内存吗?
编辑:感谢大家提供的信息answers.I已成功解决问题。
您的具体问题是差一错误:
str = new char[strlen(pstr) + 1];
// ^^^^ need one more for the '[=10=]'
str[strlen(pstr)] = '[=10=]';
一般来说,因为这是 C++ 而不是 C,所以最好 return 一个智能指针,这样调用者就知道指针的所有权语义是什么:
std::unique_ptr<char[]> read_string(char *pstr)
{
std::unique_ptr<char[]> str(new char[strlen(pstr) + 1]);
// rest as before
return str;
}
您需要为 EOS 字符space分配更多内存:
str = new char[strlen(pstr)+1];
似乎是由于分配的字符串长度不正确导致的。
您必须使用以下记录来分配字符串
str = new char[strlen(pstr) + 1];//allocate memory for the new char
str[strlen(pstr)] = '[=10=]';
函数可以如下所示
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;
}
我编写了一个函数,它接收一个 char 指针作为参数,然后构建一个包含该参数 char.Then 的新动态分配的 char 数组,它 returns 新的 char 数组。 这是函数:
char* read_string(char *pstr)
{
char *str;
str = new char[strlen(pstr)];//allocate memory for the new char
str[strlen(pstr)] = '[=10=]';
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 function.It 输出返回的 char 数组,但如果我想释放它提供的内存me runtime error.How 如果我不再需要使用 Pchar,我可以释放内存吗?
编辑:感谢大家提供的信息answers.I已成功解决问题。
您的具体问题是差一错误:
str = new char[strlen(pstr) + 1];
// ^^^^ need one more for the '[=10=]'
str[strlen(pstr)] = '[=10=]';
一般来说,因为这是 C++ 而不是 C,所以最好 return 一个智能指针,这样调用者就知道指针的所有权语义是什么:
std::unique_ptr<char[]> read_string(char *pstr)
{
std::unique_ptr<char[]> str(new char[strlen(pstr) + 1]);
// rest as before
return str;
}
您需要为 EOS 字符space分配更多内存:
str = new char[strlen(pstr)+1];
似乎是由于分配的字符串长度不正确导致的。 您必须使用以下记录来分配字符串
str = new char[strlen(pstr) + 1];//allocate memory for the new char
str[strlen(pstr)] = '[=10=]';
函数可以如下所示
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;
}