| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2462 人关注过本帖, 1 人收藏
标题:关于动态内存分配使用时候释放的一些疑问
取消只看楼主 加入收藏
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:13 
关于动态内存分配使用时候释放的一些疑问
通过f()函数来修改 i 的值,为什么后面加上 free()函数 会报错呢?
#include <stdio.h>
#include <malloc.h>
void f(int ** q)
{
    int i = 8 ;
//    *q = &i ;//用*q来存放i的地址,最后不能修改i的值,因为i的地址是系统分配的,函数调用完之后会释放掉!
    **q = i ;
}
int main(void)
{
    int * p ;//定义一个地址变量
    p = (int *)malloc(sizeof(int));//给p分配一块动态内存空间
    int i = 3 ;
    p = &i ;
    f(&p);
   
    printf("i = %d\n", i);//输出i的值
//  free(p);   为什么不能在这里手动释放分配的动态内存??
    return 0;
   
}
搜索更多相关主题的帖子: include 动态 
2012-07-31 14:36
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 3楼 hellovfp
多谢多谢啊,原来是这个原因!又懂了一点,,现在修改了之后就木有问题了
#include <stdio.h>
#include <malloc.h>
void f(int ** q)
{
    int i = 8 ;
//  *q = &i ;
    **q = i ;
}
int main(void)
{
    int * p ;
    p = (int *)malloc(sizeof(int));
    *p = 3 ;
    f(&p);
    printf("*p = %d\n", *p);
    free(p);
    return 0;
   
}
2012-07-31 15:08
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
如果没有红色的标记的话,无法改写i的值
#include <stdio.h>
#include <malloc.h>
void f(int ** q)
{
    int i = 8 ;
    **q = i ;
}
int main(void)
{
    int * p ;
    p = (int *)malloc(sizeof(int));
    int i = 3 ;//
    p = &i ;//如果没有这个步骤的话 无法改写i的值 ??

    f(&p);//把p的地址发送给函数
   
    printf("i = %d\n", i);
//  free(p);   
    return 0;
   
}
2012-07-31 15:32
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 11楼 TonyDeng
这样写直接改写了i的值,如果我想给指针变量 q 手动分配内存空间,要如何来做呢?
#include <stdio.h>
#include <malloc.h>
void f(int * q)
{
    int i = 8 ;
//  q = (int *)malloc(sizeof(int)); //这里加了这个之后就不能修改 i的值了,还是搞不懂这个地方!
    *q = i ;
}
int main(void)
{
    int i = 3 ;
    f(&i);
    printf("i = %d\n", i);
    return 0;
}
2012-07-31 15:46
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 15楼 zklhp
这里的 指针变量 p 是用来存放 i 的地址
2012-07-31 15:48
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
目前刚好学到指针这一块,个人觉得也是非常的绕,为什么弄这么一个贴,就是因为自己还不能很好的理解指针!
2012-07-31 15:53
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
回复 50楼 hellovfp
把指针的内容还得再看看,不然往后越学习越糊涂!
2012-07-31 16:17
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
那个郝斌的视频里 讲的指针这一块的内容,听着有点糊,回去再看看!
2012-07-31 16:18
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
以前大学里  c语言,数据结构,汇编 的课都没去上过,现在后悔了。。。。
2012-07-31 16:20
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
我刚就是再看前面回的内容!~
2012-07-31 16:20
快速回复:关于动态内存分配使用时候释放的一些疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017296 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved