使用 malloc后free出错 错误所在

来源:互联网 发布:linux重新挂载分区 编辑:程序博客网 时间:2024/06/05 12:00

偶认为:

这个问题是指针使用过程中很容易出错而且自己又很难发现的一个易疏忽问题-----------即:指针人为的更改了原来的指向地址。以下是一个很好的案例,其中红色字体为正确解。

问题:

用malloc与free出错,望指导,谢谢 

程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。
#include<stdlib.h>
void main()
{
char *test=malloc(100);
test="123";
free(test);
test=NULL;
}
问题补充:

哦,大概明白了点,谢谢。我用sprintf(test,"23123141421%s",test1);给char *test赋值,但是如果不char*test=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、改变指针的初始指向地址,如上文。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一年级小朋友不爱写字怎么办 幼儿园小朋友不爱写字怎么办 孩子懒散不积极怎么办 孩子不肯上幼儿园怎么办 孩子不肯去幼儿园怎么办 小孩记不住字怎么办 小孩不会写字要怎么办 一年级孩子不爱写字怎么办 一年级小孩不爱写字怎么办 孩子不爱写字怎么办呢 幼儿园孩子不爱写字怎么办 孩子上学没学籍怎么办 孩子上学务工证怎么办 孩子上学被欺负怎么办 孩子害怕上幼儿园怎么办 孩子写字肩膀疼怎么办 5岁不会写字怎么办 上中班不爱写字怎么办 孩子性子太慢怎么办 13小孩特别懒怎么办 小孩不肯上幼儿园怎么办 宝宝不肯上幼儿园怎么办 宝宝不肯去幼儿园怎么办 小孩子不肯去幼儿园怎么办 上幼儿园不说话怎么办 小孩写字不认真怎么办 游戏打开是乱码怎么办 小孩不写字该怎么办 小孩不喜欢穿袜子怎么办 宝宝不喜欢穿袜子怎么办 看到婆婆就烦怎么办 什么也不想吃怎么办 宝宝不喜欢带围兜怎么办 宝宝宝宝不喜欢脐疝带怎么办 中班小孩不写字怎么办 中班小孩不愿意写字怎么办 中班了不会写字怎么办 胃不舒服没胃口怎么办 不喜欢婆婆带孩子怎么办 小孩咳嗽吃饭吐怎么办 小孩吐不吃饭怎么办