繁体   English   中英

如何正确地在void函数内部动态分配2d数组?

[英]How properly dynamically allocate 2d array inside void function?

我仍然是C ++的新手,所以请不要对我卑鄙。 我想知道如何在void函数中初始化2维数组。

这是我的示例代码,但它给了我有关访问冲突位置的例外:

#include "stdafx.h"

void matrixInit(char***);
void matrixDel(char**);

void main(void){
    char** game=0;
    matrixInit(&game);
    matrixDel(game);
    return;
}


void matrixInit(char*** matrix) {
    matrix = new char**[3];
    for (int i(0); i < 3; i++) {
        matrix[i] = new char*[3];
        for (int j(0); j < 3; j++)
            *matrix[i][j] = '0';
    }
    return;
}

void matrixDel(char** matrix) {
    for (int i(0); i < 3; i++)
        delete[] matrix[i];
    delete[] *matrix;
    return;
}

@fireant寻求帮助以分配数组。 经过一番研究和调试之后,我将其全部弄清楚。 我希望此解决方案将来对您有所帮助!

#include "stdafx.h"

using namespace std;

int** matrixInit(int, int);
void matrixInit(int***, int, int);
void matrixDel(int**, int);
void matrixFill(int**, int, int);
void matrixPrint(int**, int, int);


void main(void) {
    const int rows = 3, cols = 3;
    int** game;

    matrixInit(&game, rows, cols); //Void allocation
    //game = matrixInit(rows, cols);  //Alternative allocation

    matrixFill(game, rows, cols);
    matrixPrint(game, rows, cols);
    matrixDel(game, rows);
    cout << endl << "Passed!"; //<iostream> lib required
    _getch(); //<conio.h> lib required
    return;
}


//Dynamical array allocation void function
void matrixInit(int*** matrix, int nRow, int nColumn) {
    (*matrix) = new int*[nRow];
    for (int i(0); i < nRow; i++)
        (*matrix)[i] = new int[nColumn];
}


//Dynamical array allocation pointer return function
int** matrixInit(int nRow, int nColumn) {
    int** matrix = new int*[nRow];
    for (int i(0); i < nRow; i++)
        matrix[i] = new int[nColumn];

    return matrix;
}


//Dynamical array deallocation void function
void matrixDel(int** matrix, int nRow) {
    for (int i(0); i < nRow; i++)
        delete[] matrix[i];
    delete[] matrix;
}


//Fill array void function 
void matrixFill(int** matrix, int nRow, int nColumn) {
    for (int i(0); i < nRow; i++)
        for (int j(0); j < nColumn; j++)
            matrix[i][j] = (j + 1) + (i * nRow);
}


//Print array void function
void matrixPrint(int** matrix, int nRow, int nColumn) {
    for (int i(0); i < nRow; i++)
        for (int j(0); j < nColumn; j++)
            cout << "[" << i << "][" << j << "] = " << matrix[i][j] << endl;
}

你快到了,

void matrixInit(char*** matrix) {
    (*matrix) = new char*[3];
    for (int i(0); i < 3; i++) {
        (*matrix)[i] = new char[3];
        for (int j(0); j < 3; j++)
            (*matrix)[i][j] = '0';
    }
    return;
}

您正在传递地址matrixInit(&game) ,但是matrix = new char**[3]; 正在覆盖传递的地址。 因此, game main并不指向所分配的内存。 您可能已经编写了void matrixInit(char*** const matrix)以确保您不会在函数内意外更改地址。 作为一种实践,请尝试修复删除功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM