AI吃大瓜 2018-05-15 04:35 采纳率: 75%
浏览 2158
已采纳

malloc动态创建一维、二维数组,内存释放的问题

 //////////////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了?

  • 写回答

7条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥40 返乡没拿电脑航班取消被困在机场了,C语言实验ddl要到了
      • ¥15 find 命令优化语句问题
      • ¥15 js 使用contenteditable属性模拟富文本框 实现具体关键字高亮
      • ¥15 QT QList<QLIst<int>> 遍历问题
      • ¥15 关于#C++#2048游戏问题
      • ¥15 这种html怎么制作
      • ¥60 高仿微信的即时通讯app
      • ¥15 用AT89C51单片机汇编实现按键流水灯
      • ¥15 关于#matlab#的问题:偏微分方程降噪的程序,上面的迭代式的表达
      • ¥15 二叉树用二叉链存储问题