4

stdlibライブラリのstrtol()を使用していくつかの証明を作成していました。これは、常にクラッシュするプログラムがあり、これが完全に機能することがわかったためです。

main(){
char linea[]="0x123456",**ap;
int num;
num=strtol(linea,ap,0);
printf("%d\n%s",num,*ap);
}

しかし、このようにクラッシュした場所に関係なく、新しい宣言を追加しただけです

main(){
char linea[]="0x123456",**ap;
int num;
num=strtol(linea,ap,0);
printf("%d\n%s",num,*ap);
int k;
}

その最後の「intk;」を追加するだけです。strtol()の実行時にプログラムがクラッシュした理由を理解できません。私はCode::Blocksでこれを行っています

4

1 に答える 1

10

strtol初期化されていないポインタを渡し、それを逆参照しているため、クラッシュが発生しますstrtol。運が良ければ、初めてクラッシュすることはありません。

これはクラッシュしません:

main() {
    char linea[]="0x123456", *ap;
    int num;
    num = strtol(linea, &ap, 0);
    printf("%d\n%s", num, ap);
    int k;
}
于 2012-05-18T01:05:12.440 に答える