社区
C语言
帖子详情
关于内存的动态分配和回收?
pc200300
2004-04-26 03:04:08
我写了一段如下代码:
int *pValue=NULL;
pValue=new int;
*pValue=120;
delete pValue;
*pValue=130;
int i=*pValue;
此时i的值为130,谁能详细讲解一下整个过程中内存的动态分配和回收,及delete后为什么还能再引用?把 new和delete换成malloc和free是同样的结果。
...全文
290
16
打赏
收藏
关于内存的动态分配和回收?
我写了一段如下代码: int *pValue=NULL; pValue=new int; *pValue=120; delete pValue; *pValue=130; int i=*pValue; 此时i的值为130,谁能详细讲解一下整个过程中内存的动态分配和回收,及delete后为什么还能再引用?把 new和delete换成malloc和free是同样的结果。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
junkuang
2004-07-05
打赏
举报
回复
pValue = new int;//申请动态内存
delete pValue;//释放动态内存,但应特别注意,delete(free)只是把指针所指的内存给
释放掉,但并没有把指针本身干掉。所以,此时指针pValue并未设置成NULL,而是变成一个野指针,指向一块未知的内存
*pValue = 130;//赋值
int i = *pValue;//所以,最后i的值为130
把 new和delete换成malloc和free是同样的结果还是一样
talkingmute
2004-06-18
打赏
举报
回复
看看林锐写的那本《高质量程序设计指南》吧,你这种情况就是因为出现了“野指针”的。
因为delete之后,只是把指针指向的内存给释放掉,而指针本身还是指向那个地址的,至于那个地址存放的是什么内容,无人可知,这样的指针就是野指针,想避免这种情况的发生就把它指向的地址设为NULL,即是一个空指针,想用时再重新给它分配内存。
yahaha
2004-06-18
打赏
举报
回复
delete只是标识释放你的指针指向的内存,你的指针还是指向原来的地方,原来的内存区域可以被其他程序使用了,你后面的使用可能回产生错误,可以说他的值是130,说明了一种偶然,就是别的程序还没有用这块内存。安全的程序是在delete后将指针赋成NULL!
nicknide
2004-06-18
打赏
举报
回复
To zb1226
操作系统才不管指针的问题呢,它只是记录地址页而已的
而且在操作系统中,并没有指针这个东西的概念的,指针只是数据结构和高级语言结合的产物
zb1226
2004-06-18
打赏
举报
回复
可能这就是操作系统的内存分配管理。
它只是将内存分配表的占用标记由1设置为0而已
并没有清除此指针。
cat8162
2004-06-18
打赏
举报
回复
大家来解释一下:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void main(void)
{
int len;
char a[]={"yhhtes2222"};
char *s1;
char *s2;#include <string.h>
const char *str;
s1=a;
len=strlen(s1);
s2=(char *)malloc(len+1);
printf("%d\n",strlen(s2));
strcpy(s2,s1);
printf("%d,%d,%d\n",strlen(s2),strlen(a),strlen(s1));
printf("%s %d\n",s2,strlen(s2));
free(s2);
//s2=NULL;
exit(0);
}
为什么strlen(s2)总比strlen(a)大四个字节,free(s2)的时候,
malloc一定要(len+1)或大于(len+1);
Unknowm
2004-06-18
打赏
举报
回复
s2=(char *)malloc(len+1);
printf("%d\n",strlen(s2));
s2刚分配内存还没有初始化就调用strlen,其长度是不确定的
malloc一定要(len+1)是为了用额外的一个字节存放空结束符
wyyhzcflying
2004-06-18
打赏
举报
回复
不好意思,小弟实在是帮不上忙?
heuristic
2004-06-15
打赏
举报
回复
mark
alever513
2004-06-15
打赏
举报
回复
所以你要记得delete之后..记得加上 NULL ...
jack_wq
2004-06-15
打赏
举报
回复
delete后还能构引用是因为你的指针很小,如果是一个较大的数组就会出问题!
zqpsswh
2004-06-15
打赏
举报
回复
别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
发现指针被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法的指针。
sboom
2004-06-14
打赏
举报
回复
同意 hoo000(火箭)
没有被再使用时不会出错的。不信弄个指针乱指乱写试试就知道。
xianfeihong
2004-06-14
打赏
举报
回复
同意楼上。
zbstone
2004-06-14
打赏
举报
回复
一般在NEW出对象后,使用完就DELETE,这个时候只是释放了内存
但是没有改变指向的内存地址
安全的做法是再将
pValue=NULL
hoo000
2004-06-14
打赏
举报
回复
delete pValue;时候,内存已经回收,至于后来没有core dump是因为,你个int型指针很小,很有可能这个内存还没有人使用,用非法的地址不一定立刻core dump
模拟实现
内存
动态
分区
分配
与
回收
一、目的 四个
动态
分区
分配
算法:最佳适应算法,循环首次适应算法,最坏适应算法,首次适应算法; 四种
回收
情况:上邻不下邻,上不邻下邻,上下都邻,上下都不邻; 要求有录入界面,
动态
初始化
内存
使用情况,
动态
录入进程对
内存
的
分配
与
回收
请求; 有算法选择界面,
动态
选择分区
分配
算法; 有输出界面,能够查看
内存
分配
与
回收
结果。 二、原理 首先创建memory类,类中包含四个
内存
分配
回收
算法: 首次适应算法private void FristFit(int size) 从链首开始顺序查找 循环首次适应算法privat
内存
的
分配
与
回收
实验
内存
的
分配
与
回收
1801010091 杨泽宇 北京师范大学珠海分校 实验目的: 1.通过使用位图或空闲表,跟踪
内存
使用情况,模拟和评价不同的
内存
分配
算法; 2.熟悉
内存
分配
和
回收
管理过程。 实验要求: 1.要求用你熟悉的程序设计语言编写和调试一个
内存
分配
和
回收
模拟程序;要求在主函数中测试。 2.实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。 3.必须模拟该4种
内存
分配
算法:first fit,next fit,best
c语言存储
分配
语句,c语言
内存
动态
分配
与
回收
c语言提供
内存
的
动态
分配
的函数有:malloc,calloc,realloc;
内存
释放的函数为free。在使用这些函数时,必须包含其头文件,分别为:,,1、malloc函数原型:void*malloc(unsignedintnum_bytes);功能:在
内存
的
动态
分配
区域中
分配
一个长度为num_bytes的连续空间返回值:返回类型是 void* 类型。void* 表示未确定类型的指针。C...
【OS系列-4】-
内存
详解(
分配
和
回收
)
内存
详解(
分配
和
回收
内存
申请malloc()/free()和new/delete异同为什么C++不淘汰malloc?malloc 的系统过程?怎么避免
内存
碎片化?
动态
内存
管理
内存
分配
三种形式
内存
分配
的方式空间
分配
与
回收
所产生的问题
分配
算法边界标识法
回收
算法伙伴系统
动态
管理
分配
算法垃圾
回收
机制无用单元
回收
内存
紧缩(避免
内存
碎片化) 《深入理解计算机系统》(P580) 从Code Segment到Stack的
内存
地址均位于用户空间中,其地址空间由低到高。其中: Code Segment(代码段或Tex
内存
的
分配
和
回收
文章目录1、总览2、单一连续
分配
3、固定分区
分配
3.1、分区说明表4、
动态
分区
分配
4.1、系统要用怎样的数据结构记录
内存
的使用情况4.2、当多个空闲分区都能满足要求时,应该选择哪个分区进行
分配
4.3、如何进行分区的
分配
和
回收
操作4.3.1、
分配
4.3.2、
回收
5、内部碎片与外部碎片6、总结 1、总览 2、单一连续
分配
3、固定分区
分配
3.1、分区说明表 4、
动态
分区
分配
4.1、系统要用怎样的数据结构记录
内存
的使用情况 4.2、当多个空闲分区都能满足要求时,应该选择哪个分区进行
分配
4
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章