C中的动态内存分配
来源:互联网 发布:web数据挖掘 pdf 编辑:程序博客网 时间:2024/05/17 00:11
在C++中是使用new 和 delete 来进行动态内存分配的,尽量减少(或不用)下面C中动态内存分配在C++中的使用。
/*
*动态内存分配的问题
* 在C语言中用的是:
*****(注意:malloc、calloc、realloc返回的值void* 类型,因此在使用时,要有显示的类型转换)
* void* malloc(size_t size)
* 在堆内存中分配一块内存空间,存储空间大小size = sizeof(ElemType)*分配的元素个数,
*返回那块空间的起始地址。但是值不确定,因此用函数 memset(地址,值(0),字节数),将所分配
*的地址全部清零。
* void* calloc(size_t num,size_t size)
* 在内存中分配一个数组,并将数组中的值初始化为 0;
* void* realloc(void* ptr,size_t size)
* 释放旧地址空间,申请新地址空间,并且根据实际情况将旧空间的数据复制到新空间中,但是,
*如果还有多余的空间,则这些新增的空间不保证清零。
*
* !!!在使用上述函数动态分配内存的时候,要注意判断所分配的内存是否为NULL或是不足!
*
* 既然在堆区中动态申请了内存,那么就得对应的要回收,用函数 void free(void* ptr),
*其地址为malloc、calloc、realloc的返回地址(保存在对应的指针变量中)
*
* 在C++中用的是:
* new 和 delete
*/
#include <iostream>
using namespace std;
#include <cstdlib>
int main()
{
// error: invalid conversion from ‘void*’ to ‘double*’ [-fpermissive]
//因此,在使用时必须要显示的进行类型转换
//double* pm = malloc(sizeof(double));
double* pm = (double*)malloc(sizeof(double));
//if(pm == NULL) exit(-1);
cout << "pm = " << pm << endl;
free(pm);
int* pc = (int*)calloc(7,sizeof(int));
cout << "pc = " << pc << endl;
int i;
for(i = 0; i != 7; i++)
cin >> pc[i]; //如果用*pc++的话,那么pc的值会改变,那么在后面用pc值的话,就会出错
/*for(i = 0; i != 7; i++)
cout << *pc++ << ' ';*/
for(int* p = pc; p != pc+7; p++)
cout << *p << ' ';
cout << endl;
/*这这是将pc 所指向在堆区中动态分配的存储空间给释放掉了,
但是pc还是指向这块空间,除非将pc 设置为NULL*/
//free(pc); pc = NULL;
//cout << pc << endl;
pc = (int*)realloc(pc , sizeof(int)*10);
cout << "pc = " << pc << endl;
//cout << *pc << endl;
for(i = 0; i != 10; i++)
cout << *(pc+i) << ' ';
cout << endl;
free(pc);
return 0;
}
- C中的动态内存分配
- c语言中的动态内存分配~
- C语言中的动态内存分配函数
- c语言中的动态内存分配
- C语言中的动态内存分配函数
- c语言中的动态内存分配
- C语言中的动态内存分配详解
- C语言中的动态内存分配
- C语言中的动态内存分配
- C语言中的动态内存分配
- c 动态内存分配
- c动态内存分配
- C动态内存分配
- 【C++】动态内存分配
- C动态内存分配
- C动态内存分配
- C动态内存分配
- C---动态内存分配
- oracle 卸载
- DVI
- struts2的s:iterator 标签 详解
- WEB项目(B/S系统)打包安装(总结篇)
- 图片滚动
- C中的动态内存分配
- 搜索技巧
- Ie6下fixed兼容回到顶部
- 如何使用MScomm控件
- 求N!末尾0的个数
- 二叉树3(构造二叉树、先序遍历、中序遍历、后序遍历)
- 几个音频格式细节备记(混)
- iPhone中如何从Application Bundle中读取文件
- 关于SQL删除重复数据只保留一条