name 是否是在离开作用域时由编译器重新分配了内存?是在哪个区域分配了空间?这样的行为是未定义的吗?
#include <stdlib.h>
#include <stdio.h>
typedef struct {
const char* name;
} island;
int main() {
island *in_heap = (island*) malloc(sizeof(island));
{
char name[80];
fgets(name, 80, stdin);
in_heap->name = name;
fgets(name, 80, stdin);
printf("address of name in scope = %p \n", &name);
}
printf("\nout of scope \n");
printf("name is not deleted, name = %s", in_heap->name);
printf("address of in_heap->name = %p \n ", &(in_heap->name));
free(in_heap);
}
输入
test
test2
输出
address of name in scope = 0x7ffffce79b10
out of scope
name is not deleted, name = test2
address of in_heap->name = 0x7ffff5954260
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.