程序1:请问运行Test函数会有什么样的结果?
程序2:请问运行Test函数会有什么样的结果?
void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); }
程序4:请问运行Test函数会有什么样的结果?
程序5:请问运行Test函数会有什么样的结果?
void test1() { char string[10]; char *str1="0123456789"; strcpy(string, str1); } 程序6:考察宏定义!输出是什么?
【结果】
1、程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。
2、可能是乱码。因为char p[] = "hello world";这句话,意思是把字符串复制到数组p中,而数组p是局部变量,在栈空间内,GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
3、能够输出hello,但是malloc后没有free,会导致内存泄漏。
4、篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str != NULL)语句不起作用。
5、数组越界。
6、这种题型只需要把宏定义直接展开到程序中即可!结果为-2,5。for循环只执行了(X)--。