http://blog.****.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)语句不起作用。