我正在写一个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矩阵的大小并删除指定的行吗?
答案 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];
这样你只能从指针数组中分配额外的指针。 您要删除的行将被成功删除。