2024-11-05 06:00:09
delete str;
只有new的才能用delete
动态分配的不能这么使用。
动态分配的内存要用free。
首先,你的代码有很多问题。
C++中被调用函数要在调用函数前面声明,所以你的getstring()要么字main前面定义,要么在main前面做声明。
下面是我给你修改好的代码,有很多问题,你自己看。
#include<iostream>
#include <memory.h>
using namespace std;
char *GetString(void)
{
char *a=NULL;
if(NULL!=(a = (char *)malloc(sizeof(char)*100))) //你之前用的是数组,数组的内存分配跟指针是不一样的,所以导致你delete时内存释放出问题
{
cout<<"Please type the number:";
cin>>a;
}
return a;
}
int main()
{
char *str = NULL;
if(NULL!=(str = (char *)malloc(sizeof(char)*100)))
{
str = GetString();
cout<<str<<endl;
if(str!=NULL)
{
free(str);
str=NULL;
}
}
cout<<*str;//这行应该删掉,或者判断是否为空,因为上面已经删了
}
 
我测试你之前的代码发现free失败。所以改成了上面的样子。
之所以free失败,是因为free释放的是你分配时候的内存空间,但是你在分配之后又修改了str的值,使指针变成了数组的指针,那么free的就不是原来的内存,所以就出错了。
我看了你给楼下的回复,我复制了你的代码没有任何问题。2024-11-05 09:42:43
#include
#include
using namespace std;
void GetString(char *str);
int main()
{
char *str=new char[100] ;
GetString(str);
cout>str;
return ;
}
我改这样还有错误没啊
#include<iostream>
#include <memory.h>
using namespace std;
void GetString(char *str);
int main()
{
char *str=new char[100] ;
GetString(str);
cout<<str<<endl;
//这里存在问题,每次只会输出字符串中第一个字符,原因也很简单,
//*str表示str指针指向的内容,而在c++中要输出字符串,直接使用str就行。因此去掉星号就正确了
delete []str;
}
void GetString(char *str)
{
if(str==NULL)
{
return ;
}
cout<<"Please type the number:";
cin>>str;
}