博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 malloc后free出错 错误所在
阅读量:6162 次
发布时间:2019-06-21

本文共 1031 字,大约阅读时间需要 3 分钟。

hot3.png

偶认为: 这个问题是指针使用过程中很容易出错而且自己又很难发现的一个易疏忽问题———–即:指针人为的更改了原来的指向地址。以下是一个很好的案例,其中红色字体为正确解。 问题: 用malloc与free出错,望指导,谢谢 程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。

#include
void main(){char *test=malloc(100);test="123";free(test);test=NULL;}

问题补充: 哦,大概明白了点,谢谢。 我用sprintf(test,”23123141421%s”,test1);给char test赋值,但是如果不chartest=malloc();就出错,用了也用free就出错,不free就不出错。。。 为什么呢,请问?学习C不久。。。问题有点无趣,但就是不明白,请指教 谢谢 回答1: 前面我接到了,free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功.

test=”123”;

这样,test就指向了一个常量的地址,而不再是malloc()分配的空间地址,而free()只用于释放动态分配的空间,所以出错.

要想将”123”字符串放在test数组中,应该用strcpy()函数完成,或者对test数组的每个元素进行单独赋值.就是说要用memcpy或者strcpy将字符赋给test,而不能直接给test赋值 这样会改变地址。 回答2: 你的意思想是想把“123”放到刚用malloc函数开辟的空间中去,从结构来分析,”123“这个字符串并没有放你原先开辟的空间中去。另外,malloc和free一般是配合来使用的,你后来test这个指针指向的已不是malloc开辟的区域了。也就是楼上所说的,free智能只能释放动态内存。弄明白就行了。我也学习了。

malloc后free出错总结:

1、malloc与free配套使用。不要跨进程分配和释放; 2、指向malloc申请的堆内存的指针,在运用过程中千万不要另外赋值,否则同样导致内存泄露(我曾今翻过这样的错误) 3、malloc后,实际使用时指针长度超过了你申请的范围。再去free时肯定出问题。 4、改变指针的初始指向地址,如上文。

转载于:https://my.oschina.net/slagga/blog/1824883

你可能感兴趣的文章
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>