请教各位大大!! 在库函数中malloc一段内存,return到主函数中,在主函数中free这段内存能否成功。 先拜谢拉!!!!:em09::em09: [ 本帖最后由 peter_barker 于 2006-3-24 10:46 编辑 ]
by peter_barker - AIX - 2006-03-24 21:36:43 阅读(703) 回复(1)
各位老大,在c/c++中是不是只有new 或者是malloc了才能delete和free?我有时候看到有的书上说什么悬空指针之类的是个危害,那是不是也要free掉?(尽管没有malloc申请过内存)。这里我一直都还是比较困惑,就是在什么样的情况下我们才使用free?
兄弟做了一上my_malloc()和一个my_free(),请各位大侠多指点.谢啦!
程序如下:
#include
假设如下情况: ---------------------------- char *buff; buff=(char*)malloc(100); buff+=50; free(buff); ---------------------------- 此时的指针指向的位置已经和原来的不同,请问这时候free的是部分内存(50)呢还是全部内存(100)?
请教大家: (1) 在编程中使用malloc并得到返回的指针后 ,能否知道在这指针后究竟分配了多少内存空间? (2) free是如何释放内存的,就是它如何得知该指针后究竟分配了多少内存空间?
如题,在C++程序里面,不考虑类对象的new和delete会调用的ctor,dtor 只考虑基本类型 例如: int* pi=new int[xxx]; free(pi); int* pi=(int*)malloc(xxx); delete[] pi; 或者比这个更复杂的情形new一块内存,然后realloc,然后delete或者free 都没有出过什么问题,更大的一些程序似乎也没有出现问题。 但是教材上面经常提到new出来的内存最好用delete,malloc出来的最好用free。请问除了考虑指针对象的ctor/dtor之外,对于普通类...
#include
这是一个二叉树删除的 程序段,这里的malloc没有free? 这是怎么回事呢? 是不是调用函数完毕自动free? struct Node *Minimum(struct Node *Root) { struct Node *pointer=(struct Node*)malloc(sizeof(struct Node)); pointer=Root; while(pointer->left!=NULL) pointer=pointer->left; return pointer; }
在http://www.ibm.com/developerworks/cn/linux/l-memory/上看到的关于内存管理的有写疑问
这里的管理的内存的地址是从0开始的,应该就是所谓的虚拟地址空间吧,这里是调用sbrk从操作系统获得内存的,是不是虚拟地址到物理地址的转化是在sbrk这个函数之中完成的?
我们用printf答应一个分配空间的地址打印的是实际物理地址还是进程的虚拟地址?
/* Include the sbrk function */
#include
用一个指针审请了一块内存,然后系统把创建的内存的首地址付值给指针. 程序员当然和道他自己创建了多少个内存空间. 假设此指针为 p1. 问题1: 可是如果调用free释放内存的话,系统怎么知道的你要放多少内存? 问题2: 如果把p1值付值给p2,然后free(p2),是否和free(p1)效果一样? 问题3: 如果把 p1++ (没有越界), 然后free(p1), 是否和 free(--p1)效果一样?有没有内存泄漏? [ 本帖最后由 rrrrrrrr8 于 2006-11-1 10:18 编辑 ]
请教一下,在AIX UNIX系统上,我malloc一块内存后,查看进程所占用内存数,发现内存占用马上增加;而当free后,发现内存还是那么大,没有变小。为什么呢? 可以肯定,free成功了,但内存还是没有降下来,然后再malloc,再free,如此循环几次,发现内存不断增加,没有下降。不解? 查看资料,说内存回收是系统决定的,不一定free之后马上就回收。如果是这样,那程序内存占用不是一直下不来? 如果我想要free之后,让系统马...