例子1:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void GetMemory(char *p)
- {
- p = (char *)malloc(100);
- }
- int main()
- {
- char *str = NULL;
- GetMemory(str);
- strcpy( str, "hello world" );
- printf(“%d\n”,str );
- return 0;
- }
函数GetMemory并不能返回申请的内存,str的值仍然是NULL,GetMemory函数的指针参数p只是实参str的一个副本。
例子2:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char *GetMemory( )
- {
- char p[] = "hello world";
- return p;
- }
- int main()
- {
- char *str = NULL;
- str = GetMemory();
- printf("%s\n",str);
- return 0;
- }
函数GetMemory返回的是栈上的空间,它只在函数范围内有效,函数调用结束后,就会消失,因此也不能返回,输出的是乱码,也可能输出的hello world(但是并不能说明内存正常返回)。
例子3:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void GetMemory( char **p, int num )
- {
- *p = (char *) malloc( num );
- }
- int main()
- {
- char *str = NULL;
- GetMemory( &str, 100 );
- strcpy( str, "hello");
- printf("%s\n",str );
- return 0;
- }
这种情况下能返回动态申请的内存。正常输出。
例子4:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char *GetMemory(int num)
- {
- char *p = (char *)malloc(num);
- return p;
- }
- int main()
- {
- char *str = NULL;
- str = GetMemory(100);
- strcpy(str, "hello");
- printf("%s\n",str );
- free(str);
- return 0;
- }
GetMemory函数能返回动态申请内存,正常输出。
阅读(945) | 评论(0) | 转发(0) |