|
|
1
33
你说得对。第二个例子中的c数组是在堆栈上分配的,因此内存将立即被重用。特别是,如果你有
您将得到奇怪的结果,因为对printf的调用会重用数组的一些空间。
会有用的。另一种选择是在范围内静态分配:
第三种选择是通过malloc在堆上分配它:
但是现在你必须确保以某种方式释放内存,否则你就有内存泄漏。 更新其中一件事似乎比我想象的更令人困惑,那就是“内存泄漏”到底是什么。泄漏是指动态分配内存,但由于地址丢失而无法释放。这些示例都不一定有泄漏,但只有第三个示例可能有泄漏,因为它是唯一动态分配内存的实例。因此,假设第三个实现,您可以编写以下代码:
泄漏,因为指针保存在自动变量中
|
|
|
2
12
如果您使用C++,那么您可能需要考虑使用
或者,在单线程环境中,您可以执行以下操作:
这个
|
|
3
9
注意,您应该稍后调用free()来清理。如果您没有访问动态分配的权限,则需要使其成为全局或堆栈上的变量,但在调用堆栈的更高层。 |
|
|
4
7
这个
|
|
5
5
您可以使用以下任一选项:
第一种方法要求不写入返回的字符串,但也是最简单的方法。最后一个使用共享的数组,如果对内存的引用丢失(最后一个共享的数组超出范围),它可以自动清理内存。如果每次调用函数时都需要新字符串,则必须使用last和second last。 |
|
|
6
4
最好是强制调用方为您提供内存,然后将字符串复制到内存中。这样打电话的人会注意到他/她需要清理。 |
|
|
7
1
一个简单的任务需要大量的工作。。。但有C代表你:-) 哎呀!我想我被随机黑客打败了。。。 |
|
|
8
0
在堆中分配字符数组?
是否可以使用
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |