关于释放内存的那点事
我在linux下编写了一个简单的测试程序,编译可以通过,但是运行时报了“*** glibc detected *** free(): invalid pointer: 0x0000007fbffffa44 ***”错误,我将错误定位在free语句上,但是不知道为什么该语句会出错。请求各位帮忙。程序如下:
int main()
{
char *A="hello world";
char *B;
B = (char*)malloc(strlen(A)+1);
B = A;
free(B);
return 0;
}
A是字符串常量,B=A的地址,freeB,就相当于freeA,当然释放不掉,而且申请的动态空间,没有被释放,内存泄露啦
free 只能释放自己malloc的 内存
注意 memcpy函数 进行内存操作的时候 会出现的问题
#pragma pack (1)
6 struct cmd
7 {
8 unsigned short sign0;
9 unsigned short crc;
10 unsigned int addr;
11 unsigned char cmd;
12 unsigned char *d;
13 };
14 #pragma pack ()
15
16
17 int main()
18
19 {
20 unsigned char b[10]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};
21
22 int i;
23 struct cmd cmd_a;
24 // unsigned char *p;
25
26
27 cmd_a.d=(unsigned char *)malloc(15*sizeof(unsigned char));
28 memset(cmd_a.d,0,15*sizeof(unsigned char));
29
30 // ss=(struct cmd*)malloc(sizeof(struct cmd));
31 // memset(ss,0,sizeof(struct cmd));
32
33 // ss->d= (unsigned char*)malloc(10*sizeof(unsigned char));/*3.结构体指针的成员指针同样需要初始化*/
34 // memset(ss->d,0,10*sizeof())
35
36 memcpy(cmd_a.d,b,10*sizeof(unsigned char));
对 memcpy 进行拷贝之后
free(cmd_a.d)
这样就是操作错误的,内存发生了变化 ,不能释放 注意啊
关于释放内存的那点事相关推荐
- (非原)如何让.net开发的Winform程序快速释放内存
.net开发的winform程序用一段时间后内存会占用特别大,影响本身以及其它程序运行. 似乎在软件内写一些内存释放管理之类的也不见效,其实告知客户,用一段时间最小化一次即可,最显著的据说从100M降 ...
- 深入理解 PHP7 unset 真的会释放内存吗?
女主宣言 PHP 提供了 unset 用于释放指定的变量,那么它真的会释放内存吗?本文将从这个话题展开讨论. 本文作者范家鹏,360技术委员会--WEB服务端分TC委员. 文本转载自360技术,转载请 ...
- php7 unset函数,深入理解 PHP7 unset 真的会释放内存吗?
一.关于unset的一些说法 有人说:unset() 并不真正释放内存: unset() 函数只能在变量值占用内存空间超过 256 字节时才会释放内存空间: 只有当指向该变量的所有变量(如引用变量)都 ...
- JNI内存方面说明以及相关类型手动释放内存
JNI内存方面说明以及相关类型手动释放内存 一.Java内存 二.JNI内存和引用 三.Local Reference 四.Global Reference 五.Weak Global Referen ...
- 频繁分配释放内存导致的性能问题的分析--brk和mmap的实现
现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C pr ...
- linux手动释放内存的方法
Linux手动释放缓存的方法 Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同 ...
- 释放内存触发断点及数组、指针的NULL初始化
Visual Studio调试时,出现"触发一个断点"内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; ...
- 【百度分享】频繁分配释放内存导致的性能问题的分析
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C prog ...
- linux释放内存命令
1.首先查看linux内存使用 #free -m 2.把内存数据同步到硬盘 #sync 3.修改 /proc/sys/vm/drop_caches文件 #echo 3 > /proc/sys/v ...
最新文章
- php日期时间戳相互转换,PHP时间戳和日期相互转换
- 双机热备+Win2003下集群案例
- linux /etc/profile和/etc/bashrc
- golang 读写文件的四种方式
- java控制台输入空格输出后不显示_为撒我加上输入输出流的代码后控制台反而什么都不显示了呢?...
- Granular Computing(粒计算)
- boost::range_reference相关的测试程序
- 我很喜欢玩游戏,那么我就适合做游戏程序员吗?
- 针对新手的Java EE7和Maven项目–第8部分
- 揪出MySQL磁盘消耗迅猛的真凶
- Linux——系统开关机指令简单学习笔记
- Kotlin入门(33)运用扩展属性
- Build DCM4chee2
- Python输入,输出,Python导入
- 【今日免费】下载19880元大数据开发从零基础到全链路全套教程(源码+视频)...
- 教你复制百度文库中的内容
- 给计算机老师的元旦祝福,送给老师的元旦祝福语(精选50句)
- 计算机磁盘管理没有打开方式,Win10系统双击磁盘和文件夹打不开提示没有与之关联的程序怎么办...
- 【沃顿商学院学习笔记】管理学——06腐败带来的间接成本和全球制裁状况Indirect Costs and Sanction
- 【论文笔记(2)】图卷积网络介绍 Understanding Convolutions on Graphs