首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

唷!小弟我又来问有关问题了!这次是free()的

2013-10-21 
唷!我又来问问题了!这次是free()的重点是在最后,能用free(c)但当用free(b)时,就会crash掉了!!这是什么回事

唷!我又来问问题了!这次是free()的


重点是在最后,能用free(c)
但当用free(b)时,就会crash掉了!!
这是什么回事?!

话说.....
当我调用已经被free掉的数据,数据依然在...
那我到底是有没有把它们释放...
b成了野指针,意图释放一个野指针,当然会崩溃   至于free的意义的话,将将要free掉的那块内存标记为可用 就是改变操作系统中空闲链表                                                                                                                             

刚刚试了试,果然位置不是指向malloc的,那它变成了指向fscanf所输入的容里面的吗?
大小是多少?还是根据输入的数量决定?

感觉的malloc对它变得没有意义了  0口0...
b的值就是你fscanf()到b里面的值 fscanf(as,"%s",&b);b的值取决于你从as那边读了什么东西到b中。因此b指向的内存是不确定的,b就是一个野指针
[解决办法]


你从文件里读出来的内容,把原本应该用来保存你malloc出来的内存空间地址的值给覆盖掉了
所以你再free(b)的时候,b指向的地址值不是malloc的出来的地址了,而是你读出来的内容!
所以free的时候已经不是malloc出来的内存空间了,所以出问题了!
fscanf(as,"%s",b); //这样就好了!后面free(b)就不会有问题啦!


呜呜呜......我快疯了...快又搞不清b跟&b的意思了...
fscanf("%s",&b);不是将数据存到b指标地址吗?不是存放到的malloc里的空间吗?
而b自身不是作为指标的大小吗?
如果将内容存到...
那......

其实char b [20];跟char *b=malloc(20);
差异在哪...
如果要放进数据,什么时候该用&b,什么时候该用b?

char *b = (char*)malloc(1000);
b是指向了malloc分配的内存空间的首地址了,你每次使用malloc这块内存空间的话,直接调用b就好了

&b是b这个指针本身直接存放的内存地址的!4个字节大小而已!

热点排行