|
|
1
5
是的,在函数不再在作用域中之后取消引用指向本地堆栈变量的指针是未定义的行为。你只是很不幸,在你尝试再次访问之前,内存没有被覆盖,没有被释放回操作系统,或者没有变成指向鼻子工厂中恶魔的函数指针。 |
|
|
2
3
并非所有UB(未定义行为)都会导致segfault。 通常,堆栈的内存不会被释放回操作系统(但它可能!),这样访问内存就可以工作了。但是在下一次(更大的)函数调用时,指针指向的内存可能会被覆盖,因此您觉得安全的数据会丢失。 |
|
|
3
1
函数调用中的malloc()可以工作,因为它存储在堆上。 指针将一直保留,直到释放内存。 是的,并不是所有未定义的行为都会导致分割错误。 |
|
|
4
0
这无关紧要
读取指向中不再存在的对象的指针并不重要
尽管如此,没有人必须抓住你:
作为补充,
Don't cast the result of malloc (and friends)
.
|
|
|
5
0
是的
您可以看到,如果您稍后使用值10调用该函数:
|
|
9-Pin · 释放具有内部空字节的动态分配字符串 1 年前 |
|
Viewed · 如何从popen中获得结果? 1 年前 |
|
|
dhutturi · malloc()没有分配我期望它[复制]的内容 1 年前 |
|
|
vansergh · 如何为malloc分配的数组释放内存? 1 年前 |
|
|
EagleStar · 显示错误的值:C指针还是malloc问题? 1 年前 |