指向指针的指针分配内存的问题

void getmemory(char **p,int num) { *p=(char *)malloc(num); } main() { char *str=NULL; getmemory(&str1,100); strcpy(str,"hello\n"); printf(str); //free(str); } 1.这样会引起内存泄露,原因是什么?是不是没有free(str) ? 2.指针中能保存的只有地址 但是我把字符串直接赋给了指针 却没出错 请问会引起怎样的不可测的危险? 如果指针中保存的是那段字符串的地址,那么那段字符串是存储在哪里的? 还是说指针中保存的是字符串的内容? 你们的意思是字符串可以直接赋给指针? 但是我那样做后再用free释放内存就会程序崩溃,为什么? 到底字符串能不能直接赋给指针呢? 回ryw12403 : 有无free都不会出错,但是会引起内存泄露 这是潜在的危险 有可能引发未知的错误 char *p; p=(char *)malloc(sizeof(p)*10); p="sdsf"; free(p); 运行后程序崩溃 是不是p="sdsf"; 不能这样赋值? 但是去掉free不会出错

第1个回答  2019-08-28
是一个危险的程序。
**p是一个二级指针,也就是说,p作为一个指针变量,它指向了另一个指针指针变量,而p指向的指针变量又指向一个变量。
你的写法,*p=&a,是把p指向的指针变量指向i,问题就来了:p指向哪里?也就是*p是多少?不知道!因为你没给他分配空间!
第2个回答  2020-03-24
1.每次
动态分配内存
后都要释放掉内存,不然以后不知什么时候会出现
内存泄漏
的问题。
2.直接把
字符串赋值
给指针实际上还是把首地址赋值给指针了。指针中保存的不是字符串内容,是字符串的地址。字符串当然保存在和那个首地址相接的内存里了。
第3个回答  2020-07-01
C提供了对字符串的内置支持,所有字符串都是以字符数组方式存储的.注意是数组,也就是字符串地址是不能改变的.
char
*p;
p="123";
这样是合法的.把字符数组"123"的首地址赋给p.
但是这地址是栈上的地址,不是堆上的,简单的说就是p不是动态分配的.free函数是用来释放动态内存,堆空间,所以加上free(p);必然会出错.
相似回答