如何重新分配在另一个函数中分配的数组?

时间:2017-11-21 05:46:36

标签: c++ arrays linked-list realloc

我是C编程的新手。 我想制作链表,所以我做了,但它不起作用。 在我这样做之后,我做了一个测试,但它仍然给出了错误。

  

malloc:对象0xa000000000000000的错误:未分配重新分配的指针   
在malloc_error_break中设置断点以进行调试

如何重新分配此数组?

void Allocate(int **arr,int totalNum, int subNum)
{
    for(int n=0;n<(totalNum+1);n++)
    {
        arr[n] = (int*)realloc(arr[n],(size_t)((subNum+1)*sizeof(int)));
    }
}
int main()
{
    int totalNum = 20;
    int subNum = 5;
    int **arr;
    arr = (int**)malloc((totalNum+1)*sizeof(int*));
    Allocate(arr,totalNum, subNum);

    for(int n=1;n<(totalNum+1);n++)
    {
        for(int s=1;s<(subNum+1);s++)
        {
            arr[n][s] = rand()%5;
            cout<<"arr["<<n<<"]["<<s<<"]: "<<arr[n][s]<<endl;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

程序崩溃是因为arr[n]在调用realloc()时未初始化。

我不完全理解您希望在realloc()函数中malloc()代替Allocate()的原因。但无论如何,让我们假设你需要realloc()

最简单的解决方法是初始化arr内容。

arr = (int**)calloc((totalNum+1),sizeof(int*));

答案 1 :(得分:0)

realloc()的第一个参数必须是NULL或之前由malloc()realloc()返回的指针。您将一个包含未初始化数据的数组传递给Allocate(),因此您将未初始化的指针传递给realloc()。您需要先将它们全部初始化为NULL

arr = malloc((totalNum+1)*sizeof(int*));
for (int i = 0; i < totalNum+1; i++) {
    arr[i] = NULL;
}
Allocate(arr,totalNum, subNum);