鱼C论坛

 找回密码
 立即注册
查看: 4446|回复: 4

C++关于函数内new分配内存的问题

[复制链接]
发表于 2013-8-5 13:13:12 | 显示全部楼层 |阅读模式
1鱼币
程序声明一个结构
struct stringy
{
        char * str;
        int ct;
};

另有一个函数为
void set(stringy & pan,char test[])
{
    pan.ct=strlen(test);
    char * pi = new char[pan.ct+1];        //问题:这里用new分配的内存到后面是不是要用delete释放呢?
    strcpy(pi,test);                  //复制字符串
    pan.str = pi;
}


不释放是不是就会泄漏呢?
书上说new和delete要成对使用,那我应该在哪里放置delete指令呢?

最佳答案

查看完整内容

只要用了new,必须有对应的delete。 当你不需要pan的时候,要进行delete。 一般用类管理内存比较好的方法是 构造的时候new,析构的时候delete。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-5 13:13:13 | 显示全部楼层
只要用了new,必须有对应的delete。

当你不需要pan的时候,要进行delete。

一般用类管理内存比较好的方法是 构造的时候new,析构的时候delete。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-5 19:43:06 | 显示全部楼层
  1. #include <string.h>
  2. struct stringy
  3. {
  4.         char * str;
  5.         int ct;
  6. };

  7. //有一个函数为
  8. void set(stringy & pan,char test[])
  9. {
  10.     pan.ct=strlen(test);
  11.     char * pi = new char[pan.ct+1];        //问题:这里用new分配的内存到后面是不是要用delete释放呢?
  12.     strcpy(pi,test);                  //复制字符串
  13.     pan.str = pi;
  14.         delete pi;
  15. }
复制代码
应该是这样,你以后写的这类程序的时候要成对编写,以免忘记
  1. void set(stringy & pan,char test[])
  2. {
  3.     pan.ct=strlen(test);
  4.     char * pi = new char[pan.ct+1];
  5.         //to do anything
  6.         delete pi;
  7. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-5 20:14:19 | 显示全部楼层
set()函数分配了一个新的内存块放指定的字符串,并把新内存块的地址赋给了结构beany的引用——pan的成员str,使用完beany我就可以delete释放这个内存块了(红色字的部分),是这样吧!!!
int main()
{
        stringy beany;
        char testing[] = "Reality isn't what it used to be.";

        set(beany,testing);
        show(beany);
        show(beany,2);
        testing[0] = 'D';
        testing[1] = 'u';
        show(testing);
        show(testing,3);
        show("Done!");
        delete [] beany.str;
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-6 02:24:19 | 显示全部楼层
C语言中, 如果用exit(0)结束函数的话, 不用释放也行, exit会调用内核进行刷新。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 06:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表