在C++中,任何一个指针用完后都要跟它找一个归属。不然它就是一个野指针,容易在外面闯祸(出现内存泄露或者其它问题),无家可归。为了不让它在外面流浪、闯祸,就给它找个安全的家,C++给了它们一个安全的家,就是NULL,事办完后要记得回家。
一、概念不同 char *str 声明的是一个指针,这个指针可以指向任何字符串常量。char str[] 声明的是一个字符数组,数组的内容可以是任何内容,严格意义上说,末尾加上'\0' 之后才能算是字符串,二、变量不同 char *str里的str是指针变量,str的值未初始化(局部变量的话。全局则自动初始化为NULL)...
char *str声明的是一个指针,这个指针可以指向任何字符串常量。 char str[]声明的是一个字符数组,数组的内容可以是任何内容,严格意义上说,末尾加上'\0'之后才能算是字符串。 3、变量不同 char *str的str是指针变量,str的值未初始化(局部变量的话,全局则自动初始化为NULL) ...
答案:程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险 博主:getmemory中p是形参,是一个指针变量,getmemory(str)调用后,传入的是指针变量保存的对象地址,p=(char *) malloc(100)实际上是把申请的动态内存空间的首地址付给p指向的地址(即str指向的地址null),这个是错误的。应该修改成指向指...
free 只是释放的str指向的内存空间,它本身的值还是存在的. 所以free之后,有一个好的习惯就是将str=NULL. 此时str指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的, 尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),但是通常会打印出w...
方法一:错误--参数的值改变后,不会传回GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。 修改如下:char *GetMemory(){ char *p=(char *)malloc(100); return p;}void Test(void){ char *str=NULL; str=GetMemory(){ strcpy(str,"hello world"...
char *str = NULL; str = GetMemory(); printf( str ); }相关知识点: 试题来源: 解析 解析:试题中 char p[] = "hello world";return p; 的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释 放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。反馈...
char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行 Test 函数会有什么样的结果?相关知识点: 试题来源: 解析 答: 输出随机的字符,GetMemory()被调用之后,分配的内粗就会被释放。反馈 收藏 ...
String::String(const char *str) { if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断 { m_data = new char[1] ; m_data[0] = '' ; } else { m_data = new char[strlen(str) + 1]; strcpy(m_data,str); } } String::String(const String &other) { m_data = ...
void InsertString(char*,int); // 在指定位置插入一个字符串 void DeleteString(int,int); // 在指定位置删除一个字符串 void Replace(char*,char*); // 将一个字符串替换为另一个字符串 char* C_Str() {return str;} // 返回以null结尾的char*类型的字符串};