二维数组的内存问题 [英] Memory issues with two dimensional array

查看:34
本文介绍了二维数组的内存问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

遵循这个很好的例子发现,我试图创建一个动态生成 int 值的二维网格(二维数组)的函数.

Following this nice example I found, I was trying to create a function that dynamically generates a 2D grid (two dimensional array) of int values.

它在您更改值的前几次运行得相当好,但如果在那之后崩溃.我猜释放内存的部分没有像它应该的那样工作.

It works fairly well the first couple of times you change the values but if crashes after that. I guess the part where memory is freed doesn't work as it should.

void testApp::generate2DGrid() {
    int i, j = 0;

    // Delete previous 2D array
    // (happens when previous value for cols and rows is 0)
    if((numRowsPrev != 0) && (numColumnsPrev != 0)) {
        for (i = 0; i < numRowsPrev; i++) {
            delete [ ] Arr2D[i];
        }
    }

    // Create a 2D array
    Arr2D = new int * [numColumns];
    for (i = 0; i < numColumns; i++) {
        Arr2D[i] = new int[numRows];
    }

    // Assign a random values
    for (i=0; i<numRows; i++) {
        for (j = 0; j < numColumns; j++) {
            Arr2D[i][j] = ofRandom(0, 10);
        }
    }

    // Update previous value with new one
    numRowsPrev = numRows;
    numColumnsPrev = numColumns;
}

推荐答案

C++ 中没有内存问题的二维数组:

2-dim array in C++ with no memory issues:

#include <vector>

typedef std::vector<int> Array;
typedef std::vector<Array> TwoDArray;

用法:

TwoDArray Arr2D; 

// Add rows
for (int i = 0; i < numRows; ++i) {
    Arr2D.push_back(Array());
}

// Fill in test data
for (int i = 0; i < numRows; i++) {    
    for (int j = 0; j < numCols; j++) {
        Arr2D[i].push_back(ofRandom(0, 10));           
    }
}

// Make sure the data is there
for (int i = 0; i < numRows; i++) {    
    for (int j = 0; j < numCols; j++) {
        std::cout << Arr2D[i][j] << ' ';
    }
std::cout << '
';
}

这篇关于二维数组的内存问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆