- 论坛徽章:
- 0
|
来挑挑错.容易犯的很阿.
闲着没事来看一眼,可实在是看不下去了。
#include <stdio.h>;
#include <stdlib.h>;
char * getMemory(char *p, unsigned int size)
{
p = (char*)malloc(sizeof(char) * size);
return p;
}
int main()
{
char *p = NULL;
p = getMemory(p,10);
strcpy(p,"hello" ;
printf("p==%s\n",p);
system("pause" ;
free(p);
return 0;
}
或者
#include <stdio.h>;
#include <stdlib.h>;
void getMemory(char **p, unsigned int size)
{
*p = (char*)malloc(sizeof(char) * size);
}
int main()
{
char **p ;
getMemory(p,10);
strcpy(*p,"hello" ;
printf("p==%s\n",*p);
system("pause" ;
free(*p);
return 0;
}
这是楼上一位兄弟的代码,有几个疑问讨论一下。
char * getMemory(char *p, unsigned int size) 这是什么用法?
其一、即然是获取内存,为什么还要传个指针?真是多此一举。
其二、即然是获取char *类型那么这个函数就没啥意义了直接用malloc就可以,虽然单独提供一个获取内存的函数很有必要,但是这个例子不好,给人感觉罗嗦。
建议规则:
type * get_type(void);
type为数据类型
char **p ;
getMemory(p,10);
大家看到了调用getMemory之前没有对p做任何赋值,所以程序运行时p的值是随机的,也就是说p指向了一段未知的区域,如果此时p的值是0于是下边的操作
*p = (char*)malloc(sizeof(char) * size);
便成了
*(char **)0 = (char*)malloc(sizeof(char) * size);
这个结果我就不说什么了
另外楼上还有兄弟说在函数内用malloc分配的空间,在函数退出前会自动释放掉,这种说法是不对的(main函数除外)malloc分配的空间是在堆中分配的,只有在用户free或者main函数退出才会释放,系统不会自动释放此段内存。
建议:
指针是C的基础初学者一定要理解透彻,否则不要急于前进。 |
|