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

标签 c

我正在编写一个 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/

相关文章:

c - 如何读取由 system() 函数创建的子进程的错误号?

c - Arduino 上使用 SPI 位联动的多个模数转换器

c++ - 从 XML(或类似的)生成 C/C++ 命令行参数解析代码

c - OR __m128 中的元素

C编程自增和自减运算符问题

c - memset 中传递数组或指针的第一个参数

c - fgetc 在使用 for 循环读取 2d 像素图时丢弃字符

c - 使用 execve 运行存在于 PATH 环境中的可执行文件

c++ - MPI、C、派生类型、 vector 结构?

c - 在 C 中,如何从 argv 设置一个无符号字符数组