2017-11-23 17 views
1

で配列を使用する場合、最初にセグメント化faut 11エラーに関する他のタイトルを見ました。C - Segmentation Fault 11配列

これは私に非常に近いです。しかし、私の問題を解決することはできません。 How to fix segmentation fault 11 error

このコードはここreadArray機能 をユーザから2配列がコード

int *readArray(int p[]) { 
    int i = 0; 
    printf("Enter the array :\n"); 
    for (i = 0; i <= 10; i++) { 
    printf("a%d : ", i); 
    scanf("%d", &p[i]); 
    } 
    return p; 
} 

int main() { 

    int *firstArray; 
    int *secondArray; 
    int *resultArray; 

    firstArray = readArray(firstArray); 
    // printArray(firstArray); 

    secondArray = readArray(secondArray); 
    // printArray(secondArray); 

    // addArray(firstArray,secondArray,resultArray); 
    // printArray(resultArray); 
    printf("\n"); 
    return 0; 
} 

ある取る私は、ユーザからの最初のものを取ることができるが、第2取ることができません。エラーセグメンテーションエラー11を取得します。

どうすれば解決できますか?

はあなたのすべてをありがとう! FIXED CODE

void readArray(int p[]) { 
    int i = 0; 
    printf("Enter the array :\n"); 
    for (i = 0; i < 11; i++) { 
    printf("a%d : ", i); 
    scanf("%d", &p[i]); 
    } 

} 

int main() { 

    int firstArray[11]; 
    int secondArray[11]; 
    int resultArray[11]; 

    readArray(firstArray); 
    // printArray(firstArray); 

    readArray(secondArray); 
    // printArray(secondArray); 

    // addArray(firstArray,secondArray,resultArray); 
    // printArray(resultArray); 
    printf("\n"); 
    return 0; 
} 
+5

アレイにいくらかのメモリを割り当てるのはどうですか? –

+0

実際には11要素は私のために大丈夫です。しかし、私はポインタを使用するので、fuctionに配列として送ることはできません。 –

+1

現在は0要素です。 –

答えて

1

あなたfirstArraysecondArray、およびresultArrayポインタがそうreadArray()p[i]が定義されていないアクセスしようと、すべて初期化されていません。

の代わりに:

int * firstArray; 
int * secondArray; 
int * resultArray; 

あなたは使用することができます:あなたが本当に動的にメモリを割り当てたい場合は

int firstArray[11]; 
int secondArray[11]; 
int resultArray[11]; 

は、その後、あなたの代わりにmalloc()を使用する必要があると思います。

int * firstArray = malloc(sizeof(int) * 11); 
int * secondArray = malloc(sizeof(int) * 11); 
int * resultArray = malloc(sizeof(int) * 11); 

そしてあなたがそれらを使用して行われている後にそれらを削除します。

free(firstArray); 
free(secondArray); 
free(resultArray); 

をところで、あなたはreadArray()に配列(またはポインタ)を渡し、その内容を変更しているので、あなたがする必要はありません何かを返す。 void readArray(int p[]) {...}(またはポインタを使用している場合はvoid readArray(int * p) {...})を定義すれば十分です。

+1

@mehmetsalihbindakを脇に:魔法の数字を使わないでください。配列の長さは11ですが、 'for(i = 0; i <= 10; i ++)'のループでは10を使用します。これにより、コードを追跡して維持することが難しくなります。配列の長さには 'const int'または' #define'を使い、それからすべてをドライブします。したがって(11が定義されていると仮定して)ループは 'for(i = 0; i <11; i ++)'でなければなりません。 –

関連する問題