gpt4 book ai didi

c - 使用realloc 扩展malloc 占用的内存空间?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:01 25 4
gpt4 key购买 nike

作为一项学校作业,我需要使用 malloc 创建内存块,当它已满时,它应该使用 realloc 扩展自身。这将在无限循环中继续。但是我遇到了段错误错误,我认为错误在 realloc 中,所以谁能告诉我我做错了什么?

#include "stdio.h"
#include "stdlib.h"
int main()
{
int boyut=5;
int* dizi;
dizi=(int *)malloc((boyut*sizeof(int)));
int b=0;
while(b<1)
{
if(*dizi<boyut){
scanf("%d",dizi);
dizi++;
}
else if(boyut=*dizi)
{
printf("boyut yetersiz");
dizi = (int*) realloc (dizi,2*sizeof(int));
boyut=*dizi*2;
}
}
return 0;
}

根据答案编辑将 malloc 区域扩展 *2。

int main()
{
int boyut=2;
int* dizi;
int* dizi1;
int n;
dizi=(int *)malloc((boyut*sizeof(int)));
int b=0;
int i;
while(b<1)
{

if(i<boyut){

for(i=0;i<boyut;i++){
printf("\nDeğer Girin:");
scanf("%d",dizi);
}
}
else if(boyut=i)
{

boyut=boyut*2;
printf("\nBoyut yetersiz yeni boyutu %d yapıyoruz",boyut);
dizi1 = (int*) realloc (dizi,boyut*sizeof(int));
dizi=dizi1;


}

}
return 0;
}

正确答案感谢有相同问题的人可以使用。

最佳答案

与重新分配之前相比,您实际上重新分配的更少。首先,您为 5 (boyut) 个整数分配空间,然后您只为 两个 个整数重新分配空间。您需要增加 boyut 并将其作为乘数重新分配。

你还需要记住 realloc 可能会失败,在那种情况下会将 dizi 设置为 NULL,使你们都取消引用 NULL 指针并释放原始指针,因此您无法释放它。

此外,don't cast the result of malloc (or realloc for that matter) .


正如 BLUEPIXY 所指出的,真正的问题是因为未定义的行为。要使 realloc 正常工作,需要将 original 指针传递给它。 dizi++ 之后就没有了。

此外,当您分配内存时,内容未初始化,这意味着它将包含看似随机的数据。所以在初始化该数据之前执行 *dizi 也会导致未定义的行为。您可能想使用例如calloc相反。

关于c - 使用realloc 扩展malloc 占用的内存空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922060/

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