1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用...
分类:
编程语言 时间:
2014-05-23 08:32:21
阅读次数:
460
1 缓冲区溢出原理
缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是堆栈(自动变量)、堆(动态内存)和静态数据区(全局或静态)。在C/C++语言中,通常使用字符数组和malloc/new之类内存分配函数实现缓冲区。溢出指数据被添加到分配给该缓冲区的内存块之外。缓冲区溢出....
分类:
其他好文 时间:
2014-05-23 08:05:04
阅读次数:
332
_hashMap.insert(pair<String,HASH_TABLE*>(tmp,hashtabletmp));这句会报segment或abort错误经同事帮看,也翻来覆去自查,终于发现原来是malloc中hTable->hList=(pHASH_ENTRY)malloc(hTable->listLen*(HASH_ENTRY_SIZE));这句写成了hTable->hList=(pHASH_ENTRY)..
分类:
其他好文 时间:
2014-05-20 20:20:34
阅读次数:
288
栈是系统为一个程序所分配的一块固定的区域,函数的局部变量都存在这堆允许程序在运行时动态地申请某个大小的内存空间。使用malloc等内存分配函数获取内存即是从堆中分配内存,而在一个函数体中例如定义一个数组之类的操作是从栈中分配内存所能申请的大小区别:栈:只要栈的剩余空间大于所申请空间,系统将为程序提供...
分类:
其他好文 时间:
2014-05-20 09:23:16
阅读次数:
246
/这里是链表的创建其包含的是头指针phead,头节点,以及尾节点p->next = NULL
为链表创建结束标志。/判断指针为空十分重要,当然也不能忘了释放,代码是:if(head !=NULL){free(head);head = NULL;}head
= (SLNode*)malloc(size...
分类:
其他好文 时间:
2014-05-17 19:40:54
阅读次数:
255
//使用动态分配内存时,要包含头文件
//malloc的参数为要分配的内存的字节数
//其返回所分配内存的第一个字节的地址
//返回类型是void*,但实际中常常转换为具体类型便于使用
//如果因某种原因而不能分配将返回NULL指针,所以使用时应验证是否分配成功
int *pNumber1=(int *)malloc(100*sizeof(int));
//callo...
分类:
其他好文 时间:
2014-05-15 23:21:54
阅读次数:
338
利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。
系统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或者分配最适于申请大小的内存块,或者分配最大空闲的内存块等)找到合适大小的空闲内存块。如果该空闲内存块过大,还需要切割成已分配的部分和较小的空...
分类:
其他好文 时间:
2014-05-15 02:56:28
阅读次数:
227
//***************************************************************
//结构体:简单的静态链表
#include
#include
#define NULL 0
#define SIZE 10
struct student
{
char num[SIZE];
float score;
struct student *next;
...
分类:
编程语言 时间:
2014-05-15 02:55:09
阅读次数:
359
#include #include #include #include int main(int
argc, char **argv){ /* 这个是给str分配存储字符串地址的空间 */ char **str =
(char**)malloc(sizeof(char*)*256); /* 这个是给...
分类:
系统相关 时间:
2014-05-15 02:05:47
阅读次数:
313