|
|
1
7
对。从堆中进行分配在这里是可行的。确保在某个地方再次释放它,否则会泄漏内存。 通常,智能指针有助于实现这种“不要忘记”逻辑。 |
|
|
2
3
右——堆中的内存(例如,使用malloc分配)将在
|
|
|
3
3
您基本上是返回一个不再存在的变量的地址(
另一方面,堆内存是在显式请求时分配的,在显式请求之前不会释放。因此,如果在函数内部分配一个内存块,将指向该内存块的指针返回给调用者就非常好了。只要确保在不再需要内存块时记录负责释放内存块的人员! |
|
|
4
2
代码中的问题将发生,因为当您在main中访问ii时,在get_ii()返回后,通过ii访问的变量已经被破坏。 如果从get-ii返回在堆上分配的内存,那么在显式销毁之前,内存将是可访问的。 |
|
|
5
2
更邪恶的是:
str(在makestring中)位于堆栈上,当makestring返回时会被销毁。 通过按值而不是按引用返回来解决此错误,这样可以在str超出作用域之前立即生成它的副本。 |
|
|
6
0
如果您正在编写C样式的代码,那么要做的事情是将指针传入对象,并通过该指针修改对象。这样,get_II函数就不会担心对象来自何处。调用函数负责处理它。 如果您正在编写C++样式,那么您应该按值返回或返回智能指针或获取引用并通过该引用修改对象。也可以使用C样式并传递指针。一些C++作者更喜欢指针传递,因为它清楚地表明对象正在被修改,而参考通道不清楚。 现在,如果对象像本例中的对象一样小,那么应该始终按值传递和返回它。它比使用指针更快、更便宜,而且使编码更加简单。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |