Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+上重新分配2D数组+;_C++_Multidimensional Array_Realloc - Fatal编程技术网

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

C++ 在C+上重新分配2D数组+;,c++,multidimensional-array,realloc,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] ; } #包括 使用名称空间std; 国际**a//全局变量 int main() { n=5; a=新整数*[n]; 对于(int i

假设我有:

#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] ;
}
#包括
使用名称空间std;
国际**a//全局变量
int main()
{
n=5;
a=新整数*[n];
对于(int i=0;i
是否有任何realloc()方法来增加行大小?(列大小是固定的) 我的意思是,如果行的大小是5,那么我想让它变成6,而不是更多,只是+1。 我用


for(i=0;i
realloc
仅在分配
malloc
时有效。如果使用
new
,则必须
delete
,然后再次使用
new
(或使用类似
std::vector
的工具)

编辑:因为您询问了如何使用
malloc
的示例:

a = new int*[n];
将成为

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

将成为

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

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

编辑:因为您询问了如何使用
malloc
的示例:

a = new int*[n];
将成为

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

将成为

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

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

如果需要大小为N的已调整大小的块

  • 分配(新)新的大小N
  • 将旧阵列/块复制到此新分配的阵列/块
  • 释放旧数组(删除)

  • 为了避免一次又一次地调用此例程,最好预先分配一个大的块,块的大小将由应用程序的需要决定,并且应该避免多次调整数组的大小。

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

    如果需要大小为N的已调整大小的块

  • 分配(新)新的大小N
  • 将旧阵列/块复制到此新分配的阵列/块
  • 释放旧数组(删除)

  • 为了避免一次又一次地调用此例程,最好预先分配一个大数据块,数据块的大小将由应用程序的需要决定,并且应该避免多次调整数组的大小。

    答案是否!


    C++内存管理不包含重新分配/调整已分配内存大小的功能。您必须使用new/copy/delete语义自己实现这一功能

    答案是否!


    C++内存管理不包含重新分配/调整已分配内存大小的功能。您必须使用new/copy/delete语义自己实现这一功能

    “因为我需要作为全局数组的数组”。它与任何东西有什么关系?错误之处在于(Konrad Rudolph的幻灯片).
    std::vector
    对象也可以是全局对象。@daknok\u\t你建议我不要使用指针,但数组的列大小将从键盘输入。因此我必须对
    a=new int
    进行编码。如果你知道任何定义无大小向量对象的方法,请告诉我:)@谁在乎你想要什么。示例:
    std::vector a;int main(){…a.reserve(n);…}
    @daknok\u你能给我更多的信息吗?对于ex,1)我如何定义像a.reserve(m,n)这样的二维空间?2) 如何添加新的“行”而不是列,列大小将是从键盘输入的变量,永远不会更改。只需添加一行。“因为我需要我的数组作为全局数组。”它与任何事情有什么关系?错的是(康拉德·鲁道夫的幻灯片)
    std::vector
    对象也可以是全局对象。@daknok_\t你建议我不要使用指针,但数组的列大小将从键盘输入。所以我必须编码
    a=newint
    东西。如果你知道任何定义矢量对象无尺寸的方法,请告诉我:)@谁在乎你想要什么。示例:
    std::vector a;int main(){…a.reserve(n);…}
    @daknok\u你能给我更多的信息吗?对于ex,1)我如何定义像a.reserve(m,n)这样的二维空间?2) 如何添加新的“行”而不是列,列大小将是从键盘输入的变量,永远不会更改。Jut添加一行。那么如何使用malloc定义数组?你能给我举个二维的例子吗?我做了
    a=(int**)malloc(0*sizeof(int))a[i]=(int*)malloc(0*sizeof(int))。但它仍然是一样的。。。它只运行一次realloc命令。然后分段错误…realloc()仍然不起作用。实际上我很困惑<代码>a[i]=(int*)realloc(a[i],计数器*sizeof(int))这是在0到nso的for循环中,如何使用malloc定义数组?你能给我举个二维的例子吗?我做了
    a=(int**)malloc(0*sizeof(int))a[i]=(int*)malloc(0*sizeof(int))。但它仍然是一样的。。。它只运行一次realloc命令。然后分段错误…realloc()仍然不起作用。实际上我很困惑<代码>a[i]=(int*)realloc(a[i],计数器*sizeof(int))这是一个for循环,实际上,向量的
    保留
    在功能上与
    realloc
    无法区分,尽管是在更高的级别上。这不是真的-保留不会像realloc那样释放未使用(但已分配)的内存。但考虑到所有STL容器都会动态调整大小,您是对的。编辑了我的帖子。这就是为什么我说“在更高的层次上”
    reserve
    确保保留大内存块,以便
    push_back
    无需将内存移动到其他分配块即可访问它。因此,实际上,
    push_back
    (不是
    reserve
    )的行为类似于
    realloc
    。实际上,向量的
    reserve
    在功能上与
    realloc
    是无法区分的,尽管在更高的级别上。这不是真的-reserve不会像realloc那样释放未使用(但已分配)的内存。但考虑到所有STL容器都会动态调整大小,您是对的。编辑