Mr. Rishi kumar Ответов: 2

Пожалуйста, объясните мне ......... Как это работает...?


#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

int n = 0;

void foo() {
    void* x;
    printf("%d\n", ++n);
    if (n >= 100) {
        exit(0);
    }
    *((char**) (&x + 4)) -= 5;
}

int main() {
    foo();
    return 1;
}


Что я уже пробовал:

я пытался понять,но не смог. пожалуйста, объясните мне .

Kornfeld Eliyahu Peter

Как насчет использования вашего отладчика!?

NotPolitcallyCorrect

Какую именно часть какой линии вы не понимаете?

User 59241

Это не работает. Как вы "пытались понять"? Скомпилируйте и запустите его, если сможете. Затем вырываем отладчик.

2 Ответов

Рейтинг:
2

CPallini

Насколько я могу понять, программа обращается к нераспределенной memeory, так как x не инициализируется и, скорее всего, указывает на мусор. Другими словами, она ущербна.


Kornfeld Eliyahu Peter

Не порть веселье! :-)

Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.