char *GetMemory(void){ char p[] = ""hello world""; return p; }
char*GetMemory(void){charp[]=""helloworld"";returnp;}voidTest(void){char*str=NULL;str...
char *GetMemory(void){
char p[] = ""hello world"";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果? 3 分
A. 程序编译错误 B. 输出“hello world” C. 无效的指针,输出不确定 D. 输出“NULL” 展开
char p[] = ""hello world"";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果? 3 分
A. 程序编译错误 B. 输出“hello world” C. 无效的指针,输出不确定 D. 输出“NULL” 展开
5个回答
展开全部
选C
因为p的生命周期在GetMemory函数执行完了就被销毁了,str指向的是个野指针。
GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。篡改动态内存区的内容,后果难以预料,非常危险,因为free(str);之后,str 成为野指针。if(str != NULL)语句不起作用。
扩展资料:
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用ch替换并返回s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。
参考资料来源:百度百科-memset
展开全部
选C,可能是乱码,也有可能是正常输出,因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原来的内容已经被清除,新内容不可知,程序员面试宝典里有专门讲该部分知识的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
选C 因为p的生命周期在GetMemory函数执行完了就被销毁了,str 指向的是个野指针
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是D, 我确定 因为free(str)是可以无限次的通过的,上边的p是子函数的一个形式参数,不会改变str的值,因此str仍然为NULL。free(NULL)没有任何问题。
最后输出<NULL>.。
最后输出<NULL>.。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询