2017-06-14 9 views
0

配列に要素を挿入するには、インターネット上の次のコードを参考にしてください。特に最初の挿入時に配列のサイズが増加し、ループの印刷のたびにゴミが印刷されてしまいました。エラーの詳細を知りたいと思っています。"***スタックスマッシングが検出されました***:./a.out terminated Aborted(コアダンプされました)" - 配列の挿入

コードが

#include <stdio.h> 
void main() 
{ 
    int k = 3, n = 5, i = 0, j = n; 
    int LA[] = {1,3,5,7,8}; 
    printf("The original array elements are :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 10; 
    printf("\nThe array elements after insertion1 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 20; 
    printf("\nThe array elements after insertion2 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 30; 
    printf("\nThe array elements after insertion3 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
} 

出力はウル時間

The original array elements are : 
1 3 5 7 8 
The array elements after insertion1 : 
1 3 5 10 7 8 
The array elements after insertion2 : 
1 3 5 20 7 8 2087809280 
The array elements after insertion3 : 
*** stack smashing detected ***: ./a.out terminated 
1 3 5 30 7 8 2087809280 -1077687568 Aborted (core dumped) 

おかげです。

+0

詳細であることを起こるものは何でもあることを行っているが、あなたがスタックを破損していることです。 "楽しみと利益のためにスタックを壊す"ルックアップ。 (免責事項:私はまだコードを読んでいない) –

答えて

3

あなたは5

int LA[] = {1,3,5,7,8}; 

その後、あなたのコードが追加要素を追加しようとしました、しかし、LAの大きさは、まだ5であるので、あなたは、配列空間で値を配置しているサイズの配列LAを宣言しましたあなたは割り当てられていません。

配列がスタックに割り当てられている可能性があります。また、配列に含まれていない領域に書き込んでいる可能性がありますので、スタックをめちゃくちゃにしています。

LAのサイズを超えてインデックスにアクセスする任意のprintfがメモリにその位置に誤差の

+0

私はプログラムが最初のwhileループの間に配列の終わりを書き出すと思う。そして、彼は単に配列の最後からprintfをフォーマットしています。次にmainは終了しようとし、スタックが壊れていることを認識します(ただし、4バイトしかありません)。 –

関連する問題