| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2462 人关注过本帖, 1 人收藏
标题:关于动态内存分配使用时候释放的一些疑问
只看楼主 加入收藏
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
int * p = (int *)malloc(sizeof(int));与 int * p ; p = (int *)malloc(sizeof(int));
这两个表达式的意思不一样 ??
2012-07-31 17:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
应该是一样的罢
2012-07-31 17:35
waja
Rank: 2
等 级:论坛游民
帖 子:53
专家分:52
注 册:2012-7-27
收藏
得分:0 
因为i=8这个地方的i的地址已经在子函数中释放了,意思就是说p所指向的内容已经释放了,然而双指针本身也是有空间的,那么这个空间又是在哪里释放的呢?
2012-07-31 19:46
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
#include <stdio.h>
#include <malloc.h>
void f(int *);
int main(void)
{
    int i = 3 ;
    f(&i);
    printf("i = %d\n", i);
    return 0;
}

void f(int * p = (int *)malloc(sizeof(int)))
{
    * p = 8 ;
}

/*
void f(int * p)
{
    p = (int *)malloc(sizeof(int));
    *p = 8 ;
}
*/
为什么蓝色部分这样写可以改写i的值,而红色这样写 却不能改写 i 的值呢??
int * p = (int *)malloc(sizeof(int));与 int * p ; p = (int *)malloc(sizeof(int));
这两个是不是有什么区别??
2012-08-01 10:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
蓝色的语法,你看看书中“参数默认值”部分。
红色,在函数中p的指向已经改变,根据p获得的地址已不是外部i的地址,你赋什么值给它都与i无关,所以改不了i的值。

授人以渔,不授人以鱼。
2012-08-01 10:44
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
也就是说当我  p = (int *)malloc(sizeof(int));
做这个操作的时候,p所指向的地址已经不再是i的地址了,而是指向一个通过malloc函数分配的那个空间的 地址了  ,是这样吗?
2012-08-01 11:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
当然啦,=是赋值操作呀。

授人以渔,不授人以鱼。
2012-08-01 11:22
快速回复:关于动态内存分配使用时候释放的一些疑问
数据加载中...
 
   



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

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