gpt4 book ai didi

c - 在c中使用realloc重新分配二维数组时出错

转载 作者:行者123 更新时间:2023-11-30 20:26:08 24 4
gpt4 key购买 nike

当我尝试重新分配 2d int 数组时,我在一个巨大的应用程序中遇到错误。为了缩小问题范围,我仅通过重新分配生成了一个小代码。错误:

 a.out: malloc.c:3574: mremap_chunk: Assertion ((size + offset) & (mp_.pagesize-1)) == 0' failed.

已中止。

相关代码:

 int main()    
{

int **am=NULL,size=0,ans=0,i;
char **name=NULL;
while(ans!=7)
{
printf("\n\n\t1. Add a Point \n\n\t2.Exit\n\n\t\t Enter your Choice : ");
scanf("%d",&ans);
switch(ans)
{
case 1 :
name=realloc(name,(size+1)*sizeof(char *));
name[size]=realloc(name[size],100*sizeof(char));

printf("\nEnter Name of Point : ");
scanf("%s",name[size]);

am=realloc(am,(size+1)*sizeof(int *));
am[size]=realloc(am[size],(size+1)*sizeof(int)); ``

if(size > 0 && am==NULL)
{
printf("Error : Can not Allocate Memory !");
break;
}
for(i=0;i<=size;i++)
{
if(i!=size)
{
am[size][i]=INFINITE;
am[i][size]=INFINITE;
}
else
am[i][size]=0;
}
size++;
break;
case 2 :
exit(0);

}
}

}

最佳答案

您的第一个问题在这里:

name=realloc(name,(size+1)*sizeof(char *));                            
name[size]=realloc(name[size],100*sizeof(char));

realloc(NULL,)返回的内存未初始化。这意味着您正在向第二个 realloc() 传递一个随机指针。请改用 malloc()

第二对 realloc() 调用也是如此。

这里还有另一个问题:

for(i=0;i<=size;i++)
{
if(i!=size)
{
am[size][i]=INFINITE;
am[i][size]=INFINITE;

您正在为每个 am[i] 访问 am[i][size],但只有最后一个实际上拥有那么多元素。分配的金额将在每轮 while 循环中增长。你需要重新思考你的逻辑。

关于c - 在c中使用realloc重新分配二维数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com