首页 > 试题广场 >

请问运行PrintString函数会有什么结果? char*

[问答题]
请问运行PrintString函数会有什么结果?
char* GetMemory2(void)  
{  
    char p[]="hello word";  
    return p;  
}  
void PrintString(void)  
{  
    char* str = NULL;  
    str = GetMemory2();  
    printf(str);  
} 

#include<iostream>
using namespace std;
char* GetMemory2()
{
	char p[] = "hello word";
	return p;
}

int main()
{
	char* str  ;
	str = GetMemory2();
	cout<<str[4];
}

//输出o,这道题答案不是瞎扯呢么
//指针指向的内存当然由指针才能释放,函数返回是不能释放指针指向的内存的,
//所以str指向的内存才会继续存在

编辑于 2020-03-10 12:41:10 回复(1)
只要是函数中有内存分配,通通无法有效。除非高数形参是f(char * &str)
发表于 2019-12-27 23:16:27 回复(0)
1. 分析 GetMemory2 函数 - 在 GetMemory2 函数中,定义了一个字符数组 p 并初始化为 "hello word" 。这里需要注意的是, p 是一个局部数组,它在函数结束时会被销毁(其内存会被释放)。 - 然后函数返回了这个局部数组的地址。 2. 分析 PrintString 函数 - 在 PrintString 函数中,首先将 str 初始化为 NULL 。 - 然后调用 GetMemory2 函数并将返回值赋给 str 。此时 str 指向了已经被释放(因为 GetMemory2 函数已结束)的内存地址。 - 最后尝试使用 printf 函数输出 str 所指向的字符串。 3. 结果 - 由于 str 指向的内存已经被释放,这会导致未定义行为。可能会输出乱码,也可能程序会崩溃,具体结果取决于操作系统和编译器的实现细节,但可以确定这是错误的代码行为。
发表于 2024-11-09 09:44:14 回复(0)