【问题标题】:What value does a pointer to pointer get assigned when points to a dynamically allocated memory?当指向动态分配的内存时,指向指针的指针被分配什么值?
【发布时间】:2015-09-16 16:52:45
【问题描述】:

考虑以下情况:

int **my_array = new int*[10];
  1. 我们在这里为 my_array 分配什么?
  2. my_array 是指向什么的指针?
  3. 有什么方法可以遍历 my_array(指针)并设置一个二维整数数组(而不是 int*)?

【问题讨论】:

  • 删除了dynamic-arrays标签:标签明确指出这是关于可以在没有明确分配内存的情况下添加或删除元素的数据结构。
  • 感谢您的编辑 :-)

标签: c++ dynamic-memory-allocation pointer-to-pointer pointer-to-array


【解决方案1】:

我们将数组的地址分配给my_array。该数组包含可以指向其他数组的指针,但还没有。

是的,我们可以这样做:

int **my_array = new int*[10];

for(int i=0; i<10; ++i)
  my_array[i] = new int[13];

my_array[2][11] = 500;

【讨论】:

  • 如何释放所有动态分配的内存?
  • 如果除了new[] 表达式中的第一个之外,此代码会泄漏(因此在修复之前投反对票)。要解决此问题,请改用 std::vector&lt;std::vector&lt;int&gt;&gt;
  • @elyse:点了,但我不想对仍在苦苦处理数组的初学者抛出异常处理(没有双关语)。
  • 当你回答别人的问题时,你应该帮助他们,而不是让事情变得更糟。
  • 这让事情变得非常糟糕。你甚至没有解决问题是懒惰的。 必须解决哪个问题,因为您没有重复使用其他人的解决方案。这段代码存在严重的安全问题,任何人都不应该使用,尤其是那些永远无法胜任解决这些问题的初学者。
【解决方案2】:

我们在这里为my_array 分配什么?

您可以将int* 分配给my_array 的元素。例如

my_array[0] = new int[20];

int i;
my_array[0] = &i;

my_array 是指向什么的指针?

它指向一个包含 10 个 int* 对象的数组。

有没有办法遍历my_array(指针)并设置一个二维整数数组(而不是 int*)?

不确定您希望在这里看到什么。 my_array 的元素只能是 int*

如果你想让my_array 成为一个指向二维数组的指针,你可以使用:

int (*my_array)[20] = new int[10][20];

现在您可以使用my_array[0][0]my_array[9][19]

PS 如果这是您理解指针和数组的尝试,那就太好了。如果您尝试在工作程序中部署此代码,请不要再使用原始数组。使用std::vectorstd::array

对于一维数组,使用:

// A 1D array with 10 elements.
std::vector<int> arr1(10);

对于二维数组,使用:

// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20)); 

【讨论】:

  • 我还没有被介绍给 std::vector。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2015-06-19
  • 2013-05-26
  • 1970-01-01
  • 2015-07-04
  • 2012-08-27
  • 2015-12-10
相关资源
最近更新 更多