2016-09-20 14 views
-1

array1、array2、sumという3つの2次元配列をRx3のCサイズで宣言する必要があります。Cで多様な2D配列を動的に宣言する

int main() 
{ 
    int row = 0; 
    printf("Enter the no. of rows:"); 
    scanf("%d", &row); 
    printf("MyArray[%d][3]", row); 

    int ** array1; 
    array1 = (int**)malloc(4 * row); 
    int rep1; 
    for (rep1 = 0; rep1 <= row; rep1++) 
    { 
    array1[rep1] = (int*)malloc(3 * 4); 
    } 

    int ** array2; 
    array2 = (int**)malloc(4 * row); 
    int rep2; 
    for(rep2 = 0; rep2 <= row; rep2++) 
    { 
    array2[rep2] = (int**)malloc(3 * 4);  
    } 
} 

が、このコードは動作していないとどのように私は、GCCコンパイラで細かい作業を3番目の配列

+0

単純なヒント:特にヒープ割り当てデータの場合、Cで2D配列を使用しないでください。おそらく[柔軟な配列メンバ](https://en.wikipedia.org/wiki/Flexible_array_member)として単一次元配列を使用し、静的なインライン関数を定義してアクセスして修正し、行列として表示します。つまり、行列の抽象データ型を適切に実装してください。 –

答えて

0

にこのコードを追加します。

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
     int row=0; 
     printf("Enter the no. of rows:"); 
     scanf("%d", &row); 

     printf("MyArray[%d][3]",row); 
     int **array1 = (int**)malloc(sizeof(int*)*row); 
     int rep1; 

     for (rep1 = 0; rep1 <= row; rep1++) 
     { 
       array1[rep1] = (int*)malloc(3*sizeof(int)); 
     } 

     int ** array2; 

     array2 = (int**)malloc(sizeof(int*)*row); 
     int rep2; 

     for(rep2 = 0; rep2 <= row; rep2++) 
     { 
       array2[rep2] = (int*)malloc(3*sizeof(int)); 
     } 
} 
1
array1 = (int**)malloc(4*row); 

4はここで何ですか? sizeof(int)がハードコードされているか、列数ですか?

#define COLS 4 

int (*arr)[COLS]; /* A pointer to an array of n int's */ 
size_t nrows = user_input(); 

arr = malloc(sizeof(*arr) * nrows); 

あなたは列の番号がわからない場合は事前におVariable Length Array(C99以降)を使用することができます:

は、あなたが使用することができ、固定幅の2D配列のためのスペースを確保するために、
size_t ncols = user_input();  
int (*arr)[ncols]; /* VLA */ 
size_t nrows = user_input(); 

arr = malloc(sizeof(*arr) * nrows); 

3番目の配列を追加するにはどうすればよいですか?

size_t ncols = user_input();  
int (*arr1)[ncols]; 
int (*arr2)[ncols]; 
int (*arr3)[ncols]; 
size_t nrows = user_input(); 

arr1 = malloc(sizeof(*arr1) * nrows); 
arr2 = malloc(sizeof(*arr2) * nrows); 
arr3 = malloc(sizeof(*arr3) * nrows); 

それとも、大きなブロック好む場合:このように

size_t ncols = user_input();  
int (*arr)[ncols]; 
size_t nrows = user_input(); 

arr = malloc(sizeof(*arr) * nrows * 3); 

int (*arr1)[ncols] = arr; 
int (*arr2)[ncols] = arr + rows; 
int (*arr3)[ncols] = arr + rows * 2; 

をシンプルfree(arr);は十分です。

+0

4は整数のサイズです –

+0

しないでください。常にsizeof(int)を使用してください。 –

+0

そして両方の配列をどのように追加しますか? –

関連する問題