• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема Проблема с циклом в С++

nikos

Green Team
25.12.2016
507
198
BIT
0
Здравствуйте! Бороздя простры интернета нашел вот такой код.
C++:
#define SIZE_MEM_MALLOC 1024*1024*1024

uint32_t *memdmp = NULL;

while(memdmp != NULL)

{

memdmp = malloc(SIZE_MEM_MALLOC);

memset(memdmp, 0x88, SIZE_MEM_MALLOC);       

free(memdmp);

err = code(void);

if (!err) break;

[/CODE]
И исходя из чистого интереса решил реализовать его в своем коде.
Получилось примерно вот-так
C++:
int main() //функция
{
    Sleep(1000);
    {
            uint32_t *memdmp = NULL;
            while (memdmp != NULL)
            {
                memdmp = (uint32_t*)malloc(SIZE_MEM_MALLOC);
                memset(memdmp, 0x88, SIZE_MEM_MALLOC);

                {
                    // тут выполняется мой код
                }
                    free(memdmp);
                    
                    
                }

            }
        }
    }
    return 0;
}
Но когда мой код перестал работать я как полный чайник в С++ был в недоумении. Только потом слегка подучив мат часть у меня появилось предположение что проблема в условии цикла.

C++:
 uint32_t *memdmp = NULL;

            while (memdmp != NULL)

            {
Но так как я полный чайник в C++ я не знаю как решить данную проблему и построить верное условие я даже не уверен что верно определил проблему. По этому очень надеюсь на помощь форума =)
 

<Gh0St>

Green Team
23.10.2018
18
6
BIT
0
Зависит от того, что именно нужно.

На вскидку:
1) При таком подходе
uint32_t *memdmp = NULL;
while (memdmp != NULL)
Выполнение не зайдёт в цикл.
Можно сделать такое условие цикла
Тогда выполнение зайдёт в цикл

2) Фукнция free не обнуляет переданный ей аргумент, поэтому правильнее было бы сделать так:
free(memdmp);
memdmp = NULL;

Опять же, всё зависит от того, чего именно нужно добиться. Нужно выполнить этот код только раз? Нужно многократное выполнение в цикле? Нужна ли переменная memdmp за пределами цикла?
 
  • Нравится
Реакции: nikos

nikos

Green Team
25.12.2016
507
198
BIT
0
Зависит от того, что именно нужно.

На вскидку:
1) При таком подходе

Выполнение не зайдёт в цикл.
Можно сделать такое условие цикла

Тогда выполнение зайдёт в цикл

2) Фукнция free не обнуляет переданный ей аргумент, поэтому правильнее было бы сделать так:


Опять же, всё зависит от того, чего именно нужно добиться. Нужно выполнить этот код только раз? Нужно многократное выполнение в цикле? Нужна ли переменная memdmp за пределами цикла?
Большое спасибо) Сейчас попробую ваше решение. Если переменая memdmp нужна дальше то тогда обнулять её не нужно?
 
Последнее редактирование:

<Gh0St>

Green Team
23.10.2018
18
6
BIT
0
Если переменная memdmp нужна за пределами цикла, то вызывать free(memdmp); - нельзя, потому, что это приведёт к освобождению памяти, и после работы цикла, указатель memdmp будет указывать на освобождённый участок памяти. После работы, память нужно освободить в любом случае, чтобы не допустить утечек памяти.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!