gpt4 book ai didi

c - 缩小二维数组的大小并从中删除特定行

转载 作者:行者123 更新时间:2023-11-30 15:51:22 25 4
gpt4 key购买 nike

我正在编写一个 C 程序,其中有两个二维数组,即 arr1 和 arr2。我必须从 arr1 中删除特定行并将其添加到 arr2 中。因此,我使用 realloc 将 arr2 的大小动态增加 1,并将 arr1 该行的内容复制到新创建的 arr2 行中。

但我的问题是,我无法缩小 arr1 的大小并使用 realloc 从中删除该特定行。任何人都可以帮我编写一个 C 代码,该代码可用于动态缩小二维数组的大小(使用 realloc 或其他方法)并从中删除特定行(通过使用该行的索引)行)?

首先我创建了这样的两个矩阵

a_seq=(float **)malloc(count1*sizeof(float*));
for(i=0;i<count1;i++)
a_seq[i]=(float *)malloc(n*sizeof(float));

然后,我在将第二个矩阵的大小增加 1 后对第二个矩阵执行了 realloc

a_full=(float **)realloc(a_full,count2*sizeof(float *));
a_full[count2-1]=(float *)malloc(n*sizeof(float));
for(s=0;s<n;s++)
a_full[count2-1][s]=a_seq[p][s];

p 是要从 a_seq 中删除的行的索引。我的问题是,我可以应用与 realloc 相同的概念来缩小 a_seq 矩阵的大小并删除指定的行吗?

最佳答案

我假设您将以以下形式将内存分配给二维数组:

int * arr = malloc(sizeof(int)*r*c);

如果您逐行分配内存,那么删除行的问题就会简化。

int * arr[r]; /*Declaring an array of pointers*/
/*Allocating memory row by row*/
for(i=0; i<r; i++) arr[i] = malloc(sizeof(int)*c);

....

/*Row denotes the row to be deleted*/
free(arr[row]);
for(i=row; i<r-1; i++) arr[i] = arr[i+1];

这样,您就只剩下指针数组分配中剩余的额外指针。您要删除的行将被成功删除。

关于c - 缩小二维数组的大小并从中删除特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169793/

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