0

私は、arr1とarr2という2つの2次元配列を持つCプログラムを書いています。arr1から特定の行を削除し、それをarr2に追加する必要があります。そこで、reallocを使用してarr2のサイズを動的に1増やし、そのarr1の行の内容をこの新しく作成されたarr2の行にコピーしました。

しかし、私の問題は、arr1のサイズを縮小して、を使用してその特定の行を削除できないことですreallocrealloc2D配列のサイズを動的に(または他の何かを使用して)縮小し、特定の行を(その行のインデックスを使用して)削除するために使用できるCコードを誰かが手伝ってくれますか?

最初はこのような2つの行列を作成しました

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

次にrealloc、サイズを1増やした後、2番目のマトリックスでを実行しました。

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

次の形式で 2 次元配列にメモリを割り当てると仮定しています。

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 に答える