Объявление памяти в стеке перезаписывает ранее объявленную память

Да, я бы сказал, что это действительно так плохо.

Он прерывает первую нормальную форму.

Вторая критика заключается в том, что ввод исходных результатов непосредственно в базу данных, без какой-либо проверки или привязки вообще, дает вам возможность открывать атаки SQL-инъекций.

То, что вы называете лень и отсутствие знаний SQL, - это материал, из которого сделаны неофиты. Я рекомендую потратить время, чтобы сделать это правильно, и рассмотреть его как возможность узнать.

Или оставьте это как есть и узнайте болезненный урок атаки SQL-инъекции.

1
задан chqrlie 24 March 2019 в 18:36
поделиться

1 ответ

Я полагаю, вы ищете:

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

Конечно, об этом позаботится ОС! Системные вызовы низкого уровня гарантируют, что вновь созданная автоматическая переменная не будет записана в уже используемый блок памяти.

В вашем примере:

for (int i = 0; i < 5; i++) {
  int nums[5];
  ...
}

это не случай, так как nums выйдет из области действия , когда i-я итерация цикл for завершается.

В результате, блок памяти nums, сохраненный во время первой итерации, будет помечен как свободный, когда начинается вторая итерация, что означает, что когда nums первой итерации будет выделено в стек, он не будет знать о существовании nums первой итерации, так как он уже вышел за рамки - он не существует!

0
ответ дан gsamaras 24 March 2019 в 18:36
поделиться
Другие вопросы по тегам:

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