C++面试之GetMemory问题

时间:2023-03-09 08:10:00
C++面试之GetMemory问题

http://blog.csdn.net/zhuxiaoyang2000/article/details/8084629

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 void GetMemory(char *p) {
     p = ();
 }
 int main(){
     char *str = NULL;
     GetMemory(str);
     strcpy(str, "hello world");
     printf("%s\n",str);
     ;
 }

请问运行Test函数会有什么样的结果?

答:程序崩溃。  因为GetMemory并不能传递动态内存, Test函数中的 str一直都是 NULL。 strcpy(str, "hello world");将使程序崩溃。

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 char *GetMemory(void) {
     char p[] = "hello world";
     return p;
 }
 int main(){
     char *str = NULL;
     str = GetMemory();
     printf("%s\n",str);
     ;
 }

请问运行Test函数会有什么样的结果?

答:可能是乱码。  因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 void GetMemory(char **p, int num) {
     *p = (char *)malloc(num);
 }
 int main(){
     char *str = NULL;
     GetMemory(&str, );
     strcpy(str, "hello");
     printf("%s\n",str);
 //    if(str != NULL){
 //        free(str);
 //        str = NULL;
 //    }
     ;
 }

请问运行Test函数会有什么样的结果?

答:  (1)能够输出hello (2)内存泄漏

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 int main(){
     );
     strcpy(str, "hello");
     free(str);
     if(str != NULL)  {
         strcpy(str, "world");
         printf("%s", str); }
     ;
 }

请问运行Test函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预料,非常危险。  因为free(str);之后,str成为野指针, if(str != NULL)语句不起作用。