返回局部变量是一个指向常量的字符串指针

返回局部变量地址

char* GetMemory(void)
{
	char p[] = "hello world";
	return p;
}

int main()
{
	char* str = NULL;
	str = GetMemory();
	printf(str);
	return 0;
}

GetMemory函数首先将"hello world"字符串(一般在.rdata区段存放)复制到栈上,然后返回对应的栈地址。当GetMemory返回后栈内存依旧可以正确访问,但是当调用printf函数时其会使用GetMemory使用过的栈,所以对应栈中的内存就会被覆盖,printf无法打印出hello world。

posted @ 2022-06-24 21:22  怎么可以吃突突  阅读(89)  评论(0编辑  收藏  举报