gpt4 book ai didi

c - 如何分配动态内存并在重新分配后重新分配我们如何将中间释放的内存带到一个 block 内存

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

假设 10k 堆

int *p1;
p1 = malloc(3*K);

然后,再请求 4K:

p2 = malloc(4*K);

现在有 3K 内存可用。

一段时间后,p1 指向的第一个内存分配被取消分配:

free(p1);

这会在两个 3K block 中留下 6K 的空闲内存。发出进一步的 4K 分配请求:

p1 = malloc(4*K);

这会导致失败——NULL 返回到 p1——因为,即使有 6K 内存可用,也没有 4K 连续 block 可用

如何将两个 3K block 合并为一个 6K block ?

以下代码给出段错误。

如果我释放释放内存的第 2 行和第 4 行,两个 block 合并为一个 block 怎么可能

#include<stdio.h>
#include<stdlib.h>

int** allocate2D(int rows,int cols)
{
int **arr2D;
int i;
arr2D = (int**)malloc(rows*sizeof(int*));
for(i=0;i<rows;i++)
{
arr2D[i] = (int*)malloc(cols*sizeof(int));
}
}
void deallocate2D(int** arr2D,int rows)
{
int i,a,b;
printf("Enter from which row you want to delete");
scanf("%d",&a);
printf("Enter till which row you want to delete");
scanf("%d",&b);
for(i=a;i<b;i++)
{
free(arr2D[i]);
}

}
main( )
{
int i,j,k;
int **arr2D;
arr2D=allocate2D(5,5);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d" ,arr2D[i][j]);
}
}
deallocate2D(arr2D,k);
}

最佳答案

你不能对内存进行碎片整理,如果你想这样做,你可以调用我。

这种情况我已经遇到过,但是我现在还没有代码,我仍然相信你不能这样做,因为这是不可能的

关于c - 如何分配动态内存并在重新分配后重新分配我们如何将中间释放的内存带到一个 block 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43495829/

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