【问题标题】:C++: How do I assign a value from a 2D dynamic array to another 2D dynamic array since 'temp[0][0] = array[0][0]' doesn't work? [closed]C ++:由于“temp [0] [0] = array [0] [0]”不起作用,如何将二维动态数组中的值分配给另一个二维动态数组? [关闭]
【发布时间】:2020-02-19 21:09:26
【问题描述】:

我是 C++ 新手,我试图弄清楚如何获取一个名为 temp 的 2D 动态数组,以从另一个名为 array 的 2D 动态数组中获取值。我不知道如何将数组中的任何值分配给 temp,因为语句 'temp[0][0] = array[0][0];'似乎没有将 array[0][0] 的值为 1 分配给 temp[0][0]。相反,在将任何值分配给 temp[0][0] 之前,在“temp[0][0] = array[0][0]”之后,temp[0][0] 似乎具有相同的随机数。我试图将 temp[0][0] 分配给 2 并且它有效。我真的不知道如何将一个二维动态数组中的值准确地分配给另一个。无论如何,提前感谢您帮助我!

    ...
    //initializing first 2D dynamic array
    int x=2;
    int y=2;
    int** array = new int*[x];
    for(int i=0; i<x; i++) array[i] = new int[y];

    //initializing second 2D dynamic array
    int new_x=3;
    int new_y=3;
    int** temp = new int*[new_x];
    for(int i=0; i<new_x; i++) temp[i] = new int[new_y];

    //assigning values
    array[0][0] = 1;
    cout << array[0][0] << endl; //output is 1

    //before assigning values to temp[0][0]
    cout << temp[0][0] << endl; //out is a huge random number

    temp[0][0] = array[0][0]; 
    cout << temp[0][0] << endl; //output is the same huge random number


    temp[0][0] = 2;
    cout << temp[0][0] << endl; //output is 2
    ...

【问题讨论】:

  • 请提供一个演示问题的最小完整程序。使用您的代码无法重现错误。
  • 去掉... 并发布一个复制错误的真实代码示例。这意味着所有#includeint main() 等等。
  • 编译并运行它。分配temp[0][0] = array[0][0]; 在我的程序中按预期工作。也许你周围的东西... 是问题所在。借用上述 cmets 所说的:编写一个可以编译和运行的自包含程序以验证问题是否存在,然后给我们确切的代码。 #includes 和所有。
  • 谢谢,我差点冲到编译器来检查这个奇迹。但是没有奇迹:)
  • 这两个数组的大小不同,你确定你看到的奇怪输出是关于第一个元素而不是其他一些未确定的值吗?

标签: c++ dynamic-arrays assign


【解决方案1】:

temp[0][0] 下的内存是动态分配的,因此这就是为什么您在分配 2 之前要从中获取一些随机(垃圾)的东西。当您分配 2 时,那里的随机垃圾会得到被有意义的值“覆盖”,在您的情况下为 int 类型 2

【讨论】:

  • 他们想知道为什么 temp[0][0] = array[0][0] 不是 1
  • @Tyler Weird,它应该可以正常工作
  • 当我尝试时它确实如此
  • @Tyler 真的吗?让我仔细检查一下
  • 好的,我试试不同的 c++ 编译器程序看看能不能工作
【解决方案2】:

您发布的代码 sn-p 可以正常工作:

首先cout 打印1 女巫是array[0][0] 的值。

第二个cout 打印未初始化的temp[0][0],我编译了here,在本例中值为0,但它可以是任何值。

由于分配temp[0][0] = array[0][0],第三个cout 打印1

第四个cout 打印分配给temp[0][0]2 的值。

如果您的代码中存在问题,则它不在发布的位中,除了您尝试在第二个cout 中打印一个未初始化的变量这一事实之外

【讨论】:

    【解决方案3】:

    我试过运行代码,赋值后输出确实是1。

    【讨论】:

    • 这应该是评论而不是答案。
    • 如果您想指出问题并且没有 50 位代表发表评论,很难保持沉默 :) 但我必须同意 :( 应该是评论。
    • 是的 :( 没有得到 50 次代表抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2019-09-08
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多