Ожидаемое поведение для использования указателя вне выделенной памяти malloc

0

Просто интересно, потому что я не могу найти способ проверить это. Представьте себе сценарий, в котором у меня есть 10 байт памяти

  1. я malloc varA с 5 байтами
  2. Назначьте строку с 7 символами (которые используют до 8 байтов)
  3. я malloc varB с 5 байтами

Будет ли программа работать с ошибкой? Или просто закончите с тарабарской памятью?

Различается ли поведение от ac/c++ и программы cuda?

  • 4
    Этот вопрос в основном «Что будет делать моя программа, если в ней есть ошибка?». Ответ в основном «Вероятно, не то, что вы хотите или ожидаете. Вот почему мы избегаем ошибок».
  • 3
    Вы не делаете это! Это даже не возможно. Когда у вас есть лист бумаги, и вы пишете на нем, когда он полон, вы больше не сидите на столе ... или ваша мама накажет вас. Тоже самое!
Показать ещё 4 комментария
Теги:

2 ответа

7
Лучший ответ

Это не утечка памяти, это переполнение буфера. И это приводит к неопределенному поведению, которое, скорее всего, даст вам странные проблемы (или даже сбои) во время выполнения.

Если вы не имеете в виду точку 2 буквально, как в

char *str = malloc(5);
str = "foobar";

Тогда у вас есть утечка памяти, а не переполнение буфера.

  • 0
    Я думаю, что можно с уверенностью сказать, что это undefined behaviour , я не знаю, верно ли то, что это приведет к buffer overflow .
  • 0
    Могу я спросить, будет ли такое же поведение в Cuda?
Показать ещё 1 комментарий
0

Неопределенное поведение для записи за пределами выделенной памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню