阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。
【说明】
阅读下面几段C++程序回答相应问题。
【问题2】 下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果 ①void GetMemory(char * p) { p = (char * )malloc(100); } void TestMemory (void) { char *str = NULL; GetMemory (str); strcpy(str, "hello world"); prinff(str); } ② char * GetMemory (void) { char p[ ] = "hello world"; return p; } void TestMemory (void) { char * str = NULL; str = GetMemory( ); printf(str); } ③void GetMemory(char * * p, int num) { * p = (char * )malloc(num); } void TestMemory (void) { char * str = NULL; GetMemory(&str, 100); strcpy( str, "hello" ); printf(sir); } ④void TestMemory (void) { char *str = (char * )malloe(100); strepy (str, "hello" ); free ( str ); if(str ! = NULL) { strepy( str, "world" ); printf(str); } } |
参考答案:
解析:程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。 程序3能够输出hello,但是会发生内存泄漏。 程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。