2004年度のソフトウェア演習IIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。

[Back] [Index]    -    [EGAMIX トップ] > [授業のページ] > [2004年度 ソフトウェア演習II] > [授業資料・ノート]
 
C言語の危険な領域へ


 
危険な言語?
 


危険な兆候?
 

これまでの授業の範囲ですでにその兆候が現れていた。

1) たとえば「配列」使用時に宣言して配列要素の制限を越えてアクセスした場合。
関数の引数の数を間違えた場合。
 
bash$ cat test.c

#include <stdio.h>

main()
{
    int data[10];

    data[1000] = 10; 
    printf("%d\n", data[1000]);
}

bash$ cc test.c                    ← 翻訳時のエラーは無い 
bash$ ./a.out
Segmentation fault (core dumped)        ← エラーが発生しプログラムが実行されない(表示されない) !!!
bash$
 

 
2) scanf 関数での '&' の付け忘れなど
 
bash$ cat test2.c

#include <stdio.h>

main()
{
    int a = 0;

    printf("数を入力してください:");
    scanf("%d", a); 

    printf("入力されたのは %d です\n", a);
}

bash$ cc test2.c                            ← 今度も翻訳時のエラーは無い 
bash$ ./a.out
数を入力してください:10
Segmentation fault (core dumped)        ← エラーが発生しプログラムが途中終了してしまう
bash$

 
 
[Q] 上の例でプログラムのどの部分がおかしいのか指摘 or 修正してみましょう
 
例のような実行時のエラーを発見し修正(デバッグ)するのは比較的面倒だ(タイプミスのエラーより難しい)。

[Q] なにが?なぜ?難しいの?
 

 
 

[Back] [Index]


Kunihiro Egami <egami@egamix.com>