0

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

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

起初我像这样创建了两个矩阵

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

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

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 矩阵的大小并删除指定的行吗?

4

1 回答 1

1

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

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];

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

于 2013-03-02T03:00:38.870 回答