【问题标题】:Printing 2d dynamic array c++ function打印二维动态数组 c++ 函数
【发布时间】:2019-12-14 18:07:37
【问题描述】:

我一直在努力解决一个问题,我必须构建必须创建、填充和打印二维动态数组的函数。

#include <string>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <fstream>

using namespace std;

void create_and_fill(int **T, int m, int n)
{
    T = new int *[m];
    for (int i = 0; i < m; i++)
    {
        T[i] = new int[n];
    }

    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            T[i][j] = -100 + rand() % 201;
        }
    }
}

void print(int **T, int m, int n )
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << T[i][j] << "\t";
        }
        cout << endl;
    }
}

int main()
{
    const int m = 5;
    const int n = 6;

    int **A = NULL;
    create_and_fill(A, m, n);
    print(A, m, n);

    int **B = NULL;
    create_and_fill(B, m, n);

    return 0;
}

创建和填充效果很好,如果我在 create_and_fill 函数中放置一些 cout,它也会打印数组。但是如果我尝试使用打印功能打印它,则禁止操作有一些例外。 我只是不明白为什么有些功能可以做到这一点而其他的不能,以及如何解决它。谢谢!

【问题讨论】:

    标签: c++ arrays printing dynamic-arrays


    【解决方案1】:

    问题是您按值传递指针。您分配并填充数组然后泄漏,因为更改未存储在您传递给函数的原始指针中。如果要修改指针本身,则需要通过引用传递:

    void create_and_fill(int **&T, int m, int n)
    

    您不会在代码中的任何位置删除数组,因此存在内存泄漏。请注意,每个new 都应该带有一个delete

    【讨论】:

    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2022-12-04
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多