Case 1:

buf内存区域在fun里有效,当fun返回时,buf指向的内存就回收了,因此一旦使用tmp访问就出现段错误。
Case 2:

buf被限制在左右括号里,出了作用域,buf不可见,但buf指向内存没有被回收,仍然是以前得。
Case 3:

由于str是堆内存,所以tmp指向栈内存没变。
Case 4:

在栈里定义了xxx,xxx就占用了buf那块内存,因此tmp打印处理是xxx的内存。
文章讨论了函数内部的内存区域(如buf)在函数返回后的行为。Case1指出,当函数fun结束,buf指向的内存被回收,导致后续访问出错。Case2说明,虽然buf变量本身不再可见,但它所指的内存依然有效。Case3提到了堆内存(str)与栈内存的区别,tmp仍然指向原来的堆内存。最后,Case4展示了栈上新定义的变量如何覆盖了buf的内存空间。
Case 1:

buf内存区域在fun里有效,当fun返回时,buf指向的内存就回收了,因此一旦使用tmp访问就出现段错误。
Case 2:

buf被限制在左右括号里,出了作用域,buf不可见,但buf指向内存没有被回收,仍然是以前得。
Case 3:

由于str是堆内存,所以tmp指向栈内存没变。
Case 4:

在栈里定义了xxx,xxx就占用了buf那块内存,因此tmp打印处理是xxx的内存。
429
5011
1510

被折叠的 条评论
为什么被折叠?