//////////////c用malloc和free//////////////////////////////
#include "stdio.h"
#include <iostream>
using namespace std;
//***********使用malloc创建一维数组,初始化、打印和释放***********
#define MALLOC_1D(p1,len,TYPE) p1 = (TYPE *)malloc(len * sizeof(TYPE));
#define FREE_1D(p1) free(p1);
template<typename TYPE>
void MALLOC_1D_INIT(TYPE *p1, int len, TYPE value = 0) {
for (int i = 0; i<len; i++)
p1[i] = value;
}
template<typename TYPE>
void PRINT_1D(TYPE *p1, int len) {
for (int i = 0; i < len; i++) {
cout << p1[i] << ",";
}
cout << endl;
}
//***********使用malloc创建二维数组,初始化、打印和释放***********
#define MALLOC_2D(p2,row,col,TYPE)\
p2 = (TYPE**)malloc(sizeof(TYPE*) *row);\
for (int i = 0; i < row; i++)\
p2[i] = (TYPE*)malloc(sizeof(TYPE) * col);
#define FREE_2D(p2,row,col)\
for (int i = 0; i<row; i++)\
free(p2[i]);\
free(p2);
template<typename TYPE>
void MALLOC_2D_INIT(TYPE **p2, int row, int col, TYPE value=0) {
for (int i = 0; i<row; i++)
for (int j = 0; j<col; j++)
{
p2[i][j] = value;
}
}
template<typename TYPE>
void PRINT_2D(TYPE **p2, int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j<col; j++)
{
cout << p2[i][j] << ",";
}
cout << endl;
}
cout << endl;
}
void main()
{
int row = 3;
int col = 5;
int cha = 4;
//一维数组
int *p1;
MALLOC_1D(p1, row, int);//开辟数组空间
MALLOC_1D_INIT(p1, row);//数组初试化
PRINT_1D(p1, row);//打印
FREE_1D(p1);//释放空间
cout << " p1[0]="<<p1[0] << endl;//【1】明明free释放了,为什么还可以访问内存?
//二维数组
int **p2;
MALLOC_2D(p2, row, col, int);//开辟数组空间
MALLOC_2D_INIT(p2, row, col);//数组初试化
PRINT_2D(p2, row, col);//打印
FREE_2D(p2, row, col);//释放空间
//cout << " p2[0][0]=" << p2[0][0] << endl;//【2】free释放了,不能访问了,去掉注释出错!
system("pause");
}
我的问题是:
【1】malloc创建的一维数组,明明free释放了,为什么还可以访问内存?是我没有成功释放内存麽?而我malloc创建的二维数组,free释放了后不能访问了
【2】如何检测自己malloc动态开辟的空间,被成功free了?