榕树贷款执行下面的Test函数,分析会输出上面结果以及代码中存在什么问题。
1、笔试题1
void GetMemory(char* p)
{
p = (char*)malloc(100);
}
void Test(void)
{
char* str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str); //将str的首地址传给printf函数,可行
榕树贷款分析:
上面这段程序有三个问题:
第一:榕树贷款在Test函数中调用GetMemory函数时,传递的是str的值,所以GetMemory函数的参数p只是str的一份临时拷贝,与str没有任何关系,将动态开辟的100个字节交由指针p管理并不会对str产生任何影响;而且榕树贷款就算传递的是str的地址,malloc函数申请空间也有可能失败;
第二:榕树贷款由于GetMemory函数并没有能让str获得空间,所以str仍为NULL,这时调用strcpy函数会导致程序错误;
第三:榕树贷款代码中并没有对动态开辟的100个字节空间进行free,会导致内存泄漏;