免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2017 | 回复: 16
打印 上一主题 下一主题

请教一个动态内存分配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-27 17:51 |只看该作者 |倒序浏览
用c++写了一个多文件项目

在文件 1.cpp 中的main()用到malloc

int main()
{
    ........

   double *t1;
   t1 = (double *)malloc(10 * sizeof(double));

   return 1;
}

然后我在另一个文件中用到对t1进行内存重分配
double test1(double *t1)
{
    ...........

    t1 = (dobule *)realloc(t1 , sizeof(double)*12);

   .......
}

在这个函数对新分配到t1的内存单元进行付值,  但是我发现在main() 中看到的t1 居然新分的单元没有记录所付的值从 t1[10]开始, 还是随即数. 我怀疑在一个函数中进行realloc或者malloc 操作,在出函数的时候, 对所分配的内存进行收回了.  请教各位高手, 不知道我的想法对不对, 然后如何解决这个问题. 因为在我的程序最好是用test1函数进行内存重分配的.

论坛徽章:
0
2 [报告]
发表于 2004-10-27 17:54 |只看该作者

请教一个动态内存分配的问题

应该是这样的。在函数中分配的空间,函数结束后就回收了。

论坛徽章:
0
3 [报告]
发表于 2004-10-27 18:03 |只看该作者

请教一个动态内存分配的问题

难道在函数中动态生成的数据没有办法记录下来吗? 问题是那个动态的生成的数据的个数我不能确定,可能是1个也可能是100000000个,甚至是无穷个.  在main() 中,我没办法明确的定义数组的大小啊. 晕 @_@.

论坛徽章:
0
4 [报告]
发表于 2004-10-27 18:16 |只看该作者

请教一个动态内存分配的问题

在另外一个函数里操作指针,
得用指针的指针.

论坛徽章:
0
5 [报告]
发表于 2004-10-27 18:26 |只看该作者

请教一个动态内存分配的问题

#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;

int f(char **s);
int main(int argc,char**argv)
{
    char *s;
    s=(char *)malloc(sizeof(char)*10);
    memset(s,'a',9);
    s[9]=0;
    printf("%s\n",s);
    f(&s);
    printf("%s",s);
    return 0;
}
int f(char **s)
{
    *s=(char*)realloc(*s,sizeof(char)*20);
    memset(*s,'b',19);
    *s[19]=0;
    return 0;
}

论坛徽章:
0
6 [报告]
发表于 2004-10-27 19:09 |只看该作者

请教一个动态内存分配的问题

谢谢, 楼上大虾的指教. 但你的程序在运行到

*s[19]=0;

出错

论坛徽章:
0
7 [报告]
发表于 2004-10-27 19:14 |只看该作者

请教一个动态内存分配的问题

哦.我在freebsd5.3下gcc 3.4.2编译成功的.
那你试试
*(*s+19)=0;

论坛徽章:
0
8 [报告]
发表于 2004-10-27 19:32 |只看该作者

请教一个动态内存分配的问题

搞定了! 太谢谢了!   我用的vc编译没有问题, 运行的时候就出错了. 但估计我程序g++ 还编译不了. 因为程序中调用了matlab 函数. 还不知道如何写g++ command的参数了. 不过先不说这个了. 程序是成功, 但我还不知道为什么用怎么写? 就请大虾再指教一下吧 呵呵.

论坛徽章:
0
9 [报告]
发表于 2004-10-27 19:39 |只看该作者

请教一个动态内存分配的问题

核心就是指针的指针啊.
你想操作一个数的地址,你得用它的指针;
你想操作一个指针的地址,你就得用它的指针,即指针的指针.给你的那个例子你还不明白怎么用吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-10-27 20:07 |只看该作者

请教一个动态内存分配的问题

[quote]原帖由 "cs_quake"]应该是这样的。在函数中分配的空间,函数结束后就回收了。[/quote 发表:

完全错误!在函数中分配的,如果不回收,也是会内存泄漏的!
楼主的问题主要是这样的。t1在main中分配了内存。然后呢。在函数里面重新扩展了大小,在扩展大小的时候,t1的值改变了,内存也扩大了。但是这个改变了的t1的值,无法传出函数。随着函数的结束,realloc出来的内存就泄漏掉了。而t1又变回了当初用malloc分配的值。而这个时候,由于曾经的realloc,这个malloc出来的内存也已经被回收了。这样,其实,t1在走过函数出来以后,已经是一个“野指针”了。而在这个过程中,泄漏了realloc中指定的内存。所以。呵呵,很大问题的程序呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP