在C ++上重新分配2D数组

时间:2012-03-10 18:39:05

标签: c++ multidimensional-array realloc

我想说:

#include <iostream>
using namespace std;
int **a; //Global Variable
int main()
{
   n=5;
   a = new int*[n];
   for ( int i = 0 ; i < n ; i++ ) 
   a[i] = new int[n] ;
}

是否有任何realloc()方法来增加行大小? (列大小已修复) 我的意思是如果行大小是5然后我想让它6不多,只是+1。 我用

for(i=0;i<n;i++)
{
   counter++;
   a[i] = (int *) realloc(a[i],counter*sizeof(int));
}

但我觉得有些不对劲......

编辑:请不要建议任何矢量或类似的......因为我需要我的数组作为全局。

3 个答案:

答案 0 :(得分:4)

realloc仅在您使用malloc分配时才有效。如果您使用new,则必须delete,然后再次使用new(或使用类似std::vector的内容)。

编辑:因为您要求提供如何使用malloc的示例:

a = new int*[n];

会变成

a = (int **) malloc (n * sizeof (int *));

a[i] = new int[n] ;

会变成

a[i] = (int *) malloc (n * sizeof (int));

答案 1 :(得分:0)

您可以编写自己的例程来调整数组大小。

如果需要大小为N

的调整大小的块
  1. 分配(新)新尺寸N
  2. 将旧数组/块复制到此新分配的数组/块
  3. 释放旧数组(删除)
  4. 为了避免一次又一次地调用这个例程,更好地预先分配一个大块,块的大小将由你的应用程序的需要决定,并且应该避免大量调整数组的大小。

答案 2 :(得分:0)

答案是不!

C ++内存管理不包含重新分配/调整已分配内存的功能。你必须自己使用new / copy / delete语义来实现这样的东西