Странный сбой с strtol() в C

Я делал некоторые доказательства с помощью strtol() из библиотеки stdlib, потому что у меня была программа, которая всегда зависала, и я обнаружил, что это работает отлично:

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;
}

просто добавив этот последний "int k;" программа потерпела крах при выполнении strtol(), не могу понять, почему. Я делаю это на Code::Blocks

1 ответ

Решение

Вы получаете сбой, потому что вы проходите strtol неинициализированный указатель и strtol разыменовывает это. Вы не получите крушение в первый раз по чистой случайности.

Это не будет сбой:

main() {
    char linea[]="0x123456", *ap;
    int num;
    num = strtol(linea, &ap, 0);
    printf("%d\n%s", num, ap);
    int k;
}
Другие вопросы по тегам