dtu*_*y68 2 c++ heap pointers new-operator
The function has a problem:
void myAllo(int mySize, char *myChar )
{
myChar = new char[mySize];
}
Run Code Online (Sandbox Code Playgroud)
堆分配是否会从myAllo()
?返回?我不这么认为,因为指向的内存myChar
将在myAllo
返回时被释放.
对 ?
欢迎任何评论.
谢谢
是否会从myAllo()返回堆分配?
不是.参数myChar
是通过值传递的myAllo()
,因此您只需修改指针的本地副本,而不是调用者上下文中指针的值.
当myAllo返回时,myChar指向的内存将被释放.
再也没有.该函数在退出时会泄漏分配的内存.要取消分配内存,您需要调用delete[]
返回的指针,new[]
但是当函数退出时,此指针超出范围.
有几种方法可以解决您的问题.
让调用者传入指针的地址,指向已分配的内存,现在您可以修改调用者指针所指向的内容.
void myAllo(int mySize, char **myChar )
{
*myChar = new char[mySize];
}
Run Code Online (Sandbox Code Playgroud)
同样,您的函数可以接受对指针的可变引用
void myAllo(int mySize, char *& myChar )
{
myChar = new char[mySize];
}
Run Code Online (Sandbox Code Playgroud)
返回指向已分配内存的指针
char *myAllo( int mySize )
{
return new char[mySize];
}
Run Code Online (Sandbox Code Playgroud)
优于所有上述解决方案,而不是返回原始指针,返回智能指针
std::unique_ptr<char[]> myAllo( int mySize )
{
return std::unique_ptr<char[]>( new char[mySize] );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1830 次 |
最近记录: |