169 похожих чатов

Драсьте. У меня происходит Thread 1 received signal SIGTRAP, Trace/breakpoint trap. 0x00007fffe09fc733

in ntdll!RtlIsZeroMemory () from C:\WINDOWS\SYSTEM32\ntdll.dll

и я нашёл где именно:
else if (n_new_size < n_old_size && Campus) {
diff = n_old_size - n_new_size;
void* p_new = ((char*)Campus) + n_new_size;
memset(p_new, 0, diff);// в этой строке происходит ошибка
}

в чём смысл этих строк:
если новый размер динамического массива структур меньше чем старый (то есть был он сначала размера 1440 (10 структур) и стал 720 (теперь структур 5)), то ту область памяти, от которой мы "избавляемся" обнуляем (зануляем все данные удалённых структур).

Зачем? Потому что в моей программе предусмотрен вывод структур, а точнее всех их данных, и поэтому, если мы "избавляемся" от какой-то области памяти, а потом (к примеру) снова увеличим размер массива (добавим ещё структур), то если я сделаю вывод всех структур, выведется в консоль мусор\старые значения "избавленных" структур.

помогите пожалуйста правильно реализовать эти строки.

13 ответов

50 просмотров

diff*sizeof(Campus) или что у тебя там

Denis- Автор вопроса
²
diff*sizeof(Campus) или что у тебя там

long long int size_building = sizeof(Building_t); n_old_size = n * size_building; n_new_size = size_building * n;

Denis- Автор вопроса
²
дай код на godbolt.org

https://godbolt.org/z/shz1W6zs7

Denis- Автор вопроса
Denis
https://godbolt.org/z/shz1W6zs7

а можно еще раз, зачем тебе кейс n_new_size < n_old_size && Campus и при реалоке нужно делать временый поинтер его чекать потом уже присваивать новое

Denis- Автор вопроса
²
а можно еще раз, зачем тебе кейс n_new_size < n_o...

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

Denis
если старый больше нового, то нужно зачистить, на ...

ну на 65 строке у тебя heap-buffer-overflow у тебя реалок уже освобождает прошлую память

Denis- Автор вопроса
²
ну на 65 строке у тебя heap-buffer-overflow у теб...

если так, то я правильно понимаю, что для функции showBuildingSpecs нужно самой проверять, что она будет выводить? если ты уловил суть проблемы, из-за которой мне пришлось memset(p_new, 0, diff); делать, то ты понимаешь, что если было структур 3 с любыми данными введёнными из клавиатуры, а потом их стало 2, а затем 5, то только первая и вторая структура будут иметь не стёртые данные, но вот 3 - "стёртые" (но по факту там останутся данные, которые вводились), а 4 и 5 с нулями

Denis
если так, то я правильно понимаю, что для функции ...

так ты вроде ставишь размер структуры,а потом ее выводишь, как разница какие данные там остались в освобожденой памяти?

Denis- Автор вопроса
²
так ты вроде ставишь размер структуры,а потом ее в...

потому что функцией showBuildingSpecs не предусмотрено, что она выводит, а предусмотрено memset`ом

Denis- Автор вопроса
²
ну на 65 строке у тебя heap-buffer-overflow у теб...

я зря поднял вопрос, я видимо где-то в коде что-то лишнее оставил и поэтому у меня такой вывод происходил. Сейчас же я смотрю, и в случае сужения размера и расширения после этого, все значения обнулены 💀💀

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта