7.10 malloc/free 的使用要点
2014-05-18 15:48
281 查看
函数 malloc 的原型如下:
void * malloc(size_t size);
用 malloc 申请一块长度为length 的整数类型的内存,程序如下:
int *p = (int *) malloc(sizeof(int) * length);
我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。
malloc 返回值的类型是void *,所以在调用malloc 时要显式地进行类型转换,将void * 转换成所需要的指针类型。
malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。我们通常记不住int, float 等数据类型的变量的确切字节数。例如int 变量在16 位系统下是2 个字节,在32 位下是4 个字节;而float 变量在16 位系统下是4 个字节,在32 位下也是4 个字节。最好用以下程序作一次测试:
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(unsigned int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(unsigned long) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(void *) << endl;
在 malloc 的“()”中使用sizeof 运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof(p))这样的程序来。
函数 free 的原型如下:
void free( void * memblock );
为什么free 函数不象malloc 函数那样复杂呢?这是因为指针p 的类型以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误
void * malloc(size_t size);
用 malloc 申请一块长度为length 的整数类型的内存,程序如下:
int *p = (int *) malloc(sizeof(int) * length);
我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。
malloc 返回值的类型是void *,所以在调用malloc 时要显式地进行类型转换,将void * 转换成所需要的指针类型。
malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。我们通常记不住int, float 等数据类型的变量的确切字节数。例如int 变量在16 位系统下是2 个字节,在32 位下是4 个字节;而float 变量在16 位系统下是4 个字节,在32 位下也是4 个字节。最好用以下程序作一次测试:
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(unsigned int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(unsigned long) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(void *) << endl;
在 malloc 的“()”中使用sizeof 运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof(p))这样的程序来。
函数 free 的原型如下:
void free( void * memblock );
为什么free 函数不象malloc 函数那样复杂呢?这是因为指针p 的类型以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误
相关文章推荐
- 高质量C++编程之(7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点)
- malloc/free 的使用要点 以及 new/delete 的使用要点
- c++ 内存管理:9、malloc/free的使用要点 new/delete的使用要点
- malloc/free和new/delete的区别及使用要点(转)
- 使用malloc()和free()函数分配和释放内存
- C++中malloc/free和new/delete 的使用
- free和malloc的使用
- 内存分配钩子__malloc_hook, __reallac_hook, __free_hook的使用
- C编程中的malloc()和free()函数使用详解
- malloc和free的使用
- malloc、free的使用
- C++中malloc/free和new/delete 的使用
- c语言,for循环中使用malloc和free出现运行错误:no source available...
- 使用二级指针分配和释放内存示例 malloc(), free()
- 【让你的C++程序更加高效】条款03:尽量使用new/delete而不是malloc/free
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- C primer plus:在结构中使用指针,使用malloc分配指针空间以及free
- new/delete和malloc/free区别,能否交叉使用
- 尽量使用new/delete操作符,而不是malloc/free来分配内存-------Effective C++学习笔记
- free和malloc的使用