程序1:
- void getmemory(char *p)
- {
- p=(char*)malloc(100);
- }
- void test(void)
- {
- char * str = NULL;
- getmemory(str);
- strcpy(str,"hello,world");
- printf(str);
- }
- int main()
- {
- test();
- }
程序1运行是会报错的,调用getmemory(str)后,在test函数内的局部变量str并未产生变化, strcpy ( str ,” hello , world ”) 写越界,造成segmentation fault。
要修改以上程序有两个办法,
修改1: 形参由char *p改成char *&p就正确了
- void getmemory(char *&p)
- {
- p=(char*)malloc(100);
- }
- void test(void)
- {
- char * str = NULL;
- getmemory(str);
- strcpy(str,"hello,world");
- printf(str);
- }
- int main()
- {
- test();
- }
修改2:传入str的地址,形参改为指向指针的指针
- void getmemory(char **p)
- {
- *p=(char*)malloc(100);
- }
- void test(void)
- {
- char * str = NULL;
- getmemory(&str);
- strcpy(str,"hello,world");
- printf(str);
- }
- int main()
- {
- test();
- }