我该在哪里delete释放?

YinQingwei1986 2014-05-19 10:15:34

char * test(char s[],int m)
{
char *p = new char[m];
for(int i = 0; i < m ; i ++)
{
p[i] = s[i];
}
return p;//该在哪里delete呢?
}


如果有main函数
void main()
{
char s[] = {'a','b','c','\0'};
char *t = test(s,4);
return;
}
在哪里delete释放呢?求指教
...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
废玻璃渣 2014-05-20
  • 打赏
  • 举报
回复
引用 4 楼 buyong 的回复:
[quote=引用 3 楼 Blizzard_whx 的回复:] c++不建议返回局部变量的引用或指针,而是采用传入参数接收你想要的值, 你的代码可以修改如下:

char * test(char* q, char s[],int m)
{
     char *p = new char[m];
      for(int i = 0; i < m ; i ++)
      {
          p[i] = s[i];
      }
      q = p;
     delete[] p;
      p = NULL;
     return *q;  //此处不是局部变量,返回值便于连等操作
 }

void main()
{
   char s[] = {'a','b','c','\0'};
   char *t = NULL;
    char *t = test(t, s,4);
    return;
}
楼主看这样是不是容易理解了,(其实去看看strcpy的源码的写法就明白了)
这代码能编译过??[/quote] 不好意思,是return q;笔误,返回值明显是char*嘛
YinQingwei1986 2014-05-20
  • 打赏
  • 举报
回复
谢谢,应该返回p不是*p
time_exceed 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 Blizzard_whx 的回复:
c++不建议返回局部变量的引用或指针,而是采用传入参数接收你想要的值, 你的代码可以修改如下:

char * test(char* q, char s[],int m)
{
     char *p = new char[m];
      for(int i = 0; i < m ; i ++)
      {
          p[i] = s[i];
      }
      q = p;
     delete[] p;
      p = NULL;
     return *q;  //此处不是局部变量,返回值便于连等操作
 }

void main()
{
   char s[] = {'a','b','c','\0'};
   char *t = NULL;
    char *t = test(t, s,4);
    return;
}
楼主看这样是不是容易理解了,(其实去看看strcpy的源码的写法就明白了)
3楼的好,可直接复制
汗晕倒 2014-05-20
  • 打赏
  • 举报
回复
用完它的时候,可以搞一对函数,一个函数里面分配,一个函数里面销毁 用的时候就按照需求来用
signforlin 2014-05-20
  • 打赏
  • 举报
回复
引用 4 楼 buyong 的回复:
[quote=引用 3 楼 Blizzard_whx 的回复:] c++不建议返回局部变量的引用或指针,而是采用传入参数接收你想要的值, 你的代码可以修改如下:

char * test(char* q, char s[],int m)
{
     char *p = new char[m];
      for(int i = 0; i < m ; i ++)
      {
          p[i] = s[i];
      }
      q = p;
     delete[] p;
      p = NULL;
     return *q;  //此处不是局部变量,返回值便于连等操作
 }

void main()
{
   char s[] = {'a','b','c','\0'};
   char *t = NULL;
    char *t = test(t, s,4);
    return;
}
楼主看这样是不是容易理解了,(其实去看看strcpy的源码的写法就明白了)
这代码能编译过??[/quote] 我也觉得不能,return *q;是返回第一个字母,而t是一个指针
buyong 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 Blizzard_whx 的回复:
c++不建议返回局部变量的引用或指针,而是采用传入参数接收你想要的值, 你的代码可以修改如下:

char * test(char* q, char s[],int m)
{
     char *p = new char[m];
      for(int i = 0; i < m ; i ++)
      {
          p[i] = s[i];
      }
      q = p;
     delete[] p;
      p = NULL;
     return *q;  //此处不是局部变量,返回值便于连等操作
 }

void main()
{
   char s[] = {'a','b','c','\0'};
   char *t = NULL;
    char *t = test(t, s,4);
    return;
}
楼主看这样是不是容易理解了,(其实去看看strcpy的源码的写法就明白了)
这代码能编译过??
废玻璃渣 2014-05-19
  • 打赏
  • 举报
回复
c++不建议返回局部变量的引用或指针,而是采用传入参数接收你想要的值, 你的代码可以修改如下:

char * test(char* q, char s[],int m)
{
     char *p = new char[m];
      for(int i = 0; i < m ; i ++)
      {
          p[i] = s[i];
      }
      q = p;
     delete[] p;
      p = NULL;
     return *q;  //此处不是局部变量,返回值便于连等操作
 }

void main()
{
   char s[] = {'a','b','c','\0'};
   char *t = NULL;
    char *t = test(t, s,4);
    return;
}
楼主看这样是不是容易理解了,(其实去看看strcpy的源码的写法就明白了)
mujiok2003 2014-05-19
  • 打赏
  • 举报
回复
C++中不建议这样的代码,使用RAII手法。

std::vector<char> test(char s[],int m)
{
     return  std::vector<char>(s, s + m);
}
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
调用它的时候,如: char* szch=test("hello",6); delete[] szch;

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧