我是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;
}
}
}
答案 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);