2016-12-11 10 views
0
#include<stdio.h> 
#include<stdlib.h> 

int crp(int mtrs[],int size) 
{ 
    int a=1; 
    int i; 

    for(i=0;i<size;++i) 
    { 
     a*=mtrs[i]; 
    } 

    return a; 
} 

int main() 
{ 
    int k,size; 
    int **mtrs; 

    printf("enter the size of the matrix:"); 
    scanf("%d",&size); 

    mtrs=(int**)malloc(size*sizeof(int*)); 

    if(mtrs == NULL) 
     printf("Yetersiz bellek!"); 

    printf("enter the input numbers of matrix:"); 

    for(k=0;k<size;k++) 
    { 
     mtrs[k] =(int*) malloc(size* sizeof(int)); 
     if(mtrs[k] == NULL) 
      printf("not enough memory!"); 
    } 
    for(k=0;k<size;k++) 
    { 
     scanf("%d",&mtrs[k]); 
    } 
    printf("\n\n"); 

    for(k=0;k<size;k++){ 
     printf("%d ",mtrs[k]); 
    } 

    printf("\n\n"); 
    printf("Elemanlar carpimi %d dir.",crp(mtrs[k],size)); 

    return 0; 
} 

場所0xFDFDFDを読み取るアクセス違反の問題が発生します。 * =のメートル先の場所でstucks配列内のメモリを割り当てることができません

それは、[I]; ...プログラムの目的は、私が正しい方法でmalloc関数を使用していた場合、私はわからない入力された数の乗算

にあります。

+0

あなたは 'mtrs [k]'に 'scanf'し、' mtrs [k] 'も表示します。もう少し考えてみましょう。* mtrs [k] 'とは何ですか? –

+0

この行に 'k'を持つ値はどれですか?' printf( "Elemanlar carpimi%d dir。"、crp(mtrs [k]、size)); '? – alk

+0

http://paste.ofcode.org/dzcB3RgQ627QqcCUqJU6Ljこの方法で正常に動作しますが、6つ以上の入力番号を入力すると機能しません。私はこの問題を解決するためにmallocを使いたいと思っていました... – chatay

答えて

0

このコードスニペットは無効であるあなたは、たとえば

のために書くべき
for(k=0;k<size;k++) 
{ 

    scanf("%d",&mtrs[k]); 
       &&&&&&&& 
} 

int m; 
//... 

for(k=0;k<size;k++) 
{ 
    for (m = 0; m < size; m++)   
    { 
     scanf("%d", &mtrs[k][m]); 
    } 
} 

同じがそれは

for(k=0;k<size;k++) 
{ 
    for (m = 0; m < size; m++)   
    { 
     printf("%d ",mtrs[k][m]); 
    } 
    printf("\n"); 
} 
のようになります。このループ

for(k=0;k<size;k++){ 


    printf("%d ",mtrs[k]); 

} 

に対して有効です私は完全にあなたのコード・ポイントが何であるかを理解していないが、あなたは、様々なミスをしてい

機能は

long long int crp(int * mtrs[],int size) 
^^^^^^^^^^^^^  ^^^^^^^^^^^^ 
{ 
    long long int a=1; 
    int i, j; 
    ^^^^^^^^^ 


    for(i=0;i<size;++i) 
    { 
     for (j = 0; j < size; j++) 
     { 
      a*=mtrs[i]; 
     } 
    } 

    return a; 
} 

のように定義する必要があり、関数の結果は

printf("Elemanlar carpimi %lld dir.",crp(mtrs,size)); 
          ^^^^^ 
+0

'scanf("%d "、&mtrs [k]); &&&&&&&&& 'は無効です。コードから' &&&&&&&&& 'を削除するか編集します。 – Inline

0

のように出力されなければならないとそれに伴う論理的な問題。

  1. printf("%d ",mtrs[k]);scanf("%d",&mtrs[k]);intを期待していますが(別名int[]*intを通過し、あなたはおそらく2つのネストされたforループを使用して値を読み取る/挿入する必要があります。
  2. printf("Elemanlar carpimi %d dir.",crp(mtrs[k],size));最終サイクルはfor(k=0;k<size;k++)であり、k = sizeであるため、mtrs[k]はアプリケーションクラッシュの原因となります。
+0

paste.ofcode.org/dzcB3RgQ627QqcCUqJU6Ljこれはうまく動作しますが、6つ以上の入力番号を入力すると機能しません。だから私はこの問題を解決するためにmallocを使いたかったのです... – chatay

関連する問題