缩小2D阵列的大小并从中删除特定行

时间:2013-03-02 01:54:00

标签: c

我正在写一个C程序,我有两个2d阵列说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));

然后我在第二个矩阵上增加了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矩阵的大小并删除指定的行吗?

1 个答案:

答案 0 :(得分: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];

这样你只能从指针数组中分配额外的指针。 您要删除的行将被成功删除。