c++语言中一个关于字符串分配的一个问题?我程序有点点错误能帮看下吗?

#include<iostream>
#include <memory.h>
using namespace std;
int main()
{
char *str = NULL;
str=(char *)malloc(sizeof(char));
str = GetString();
cout<<*str<<endl;
delete str;
cout<<*str;
}
char *GetString(void)
{
char a[100];
memset(a,0,100);
cout<<"Please type the number:";
cin>>a;
return a;
}
最新回答
后巷的猫街少女

2024-11-05 06:00:09

delete str;

只有new的才能用delete

动态分配的不能这么使用。

动态分配的内存要用free。

首先,你的代码有很多问题。

C++中被调用函数要在调用函数前面声明,所以你的getstring()要么字main前面定义,要么在main前面做声明。

下面是我给你修改好的代码,有很多问题,你自己看。

#include&amp;lt;iostream&amp;gt;
#include &amp;lt;memory.h&amp;gt;
using namespace std;
char *GetString(void)
{
char *a=NULL;
if(NULL!=(a = (char *)malloc(sizeof(char)*100))) //你之前用的是数组,数组的内存分配跟指针是不一样的,所以导致你delete时内存释放出问题
{
cout&amp;lt;&amp;lt;"Please type the number:";
cin&amp;gt;&amp;gt;a;
}
return a;
}
int main()
{
char *str = NULL;
if(NULL!=(str = (char *)malloc(sizeof(char)*100)))
{
str = GetString();
cout&amp;lt;&amp;lt;str&amp;lt;&amp;lt;endl;
if(str!=NULL)
{
free(str);
str=NULL;
}
}
cout&amp;lt;&amp;lt;*str;//这行应该删掉,或者判断是否为空,因为上面已经删了
}


&amp;nbsp;


我测试你之前的代码发现free失败。所以改成了上面的样子。

之所以free失败,是因为free释放的是你分配时候的内存空间,但是你在分配之后又修改了str的值,使指针变成了数组的指针,那么free的就不是原来的内存,所以就出错了。

我看了你给楼下的回复,我复制了你的代码没有任何问题。

与我归江南

2024-11-05 09:42:43

问题很多,不得不说几句,
1,与malloc对应的是free,与new对应的是delete
2,子函数定义在main函数后面时,需要在main之前加入函数声明。
3,main函数没有return,虽然这个问题不算什么,但是好习惯是必须的。
4,第二行多余了。
5,要明确,str指向的是一个字符,即使你让他的值为数组的首地址,你也无法将它转换为数组
6,a[]在子函数执行完会被销毁,你直接返回a的首地址,这么做不安全。
7,你为str分配了空间,然后又让该指针指向所谓a[]的地址,那么前面的分配空间有什么用?
8,当你销毁了str所指向的内容后,还要输出指针指向的值?
9,C++中的标准中提供了对字符串进行操作的数据类型,string
追问
#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;
}