@romazhan

Почему программа может использовать больше динамической памяти, чем выделил `malloc()`?

#include <stdlib.h>

int main(int argc, char *argv[1]) {
    char *greeting = "Hello, ";
    char *name = "User!";
    char *result = (char *)malloc(1);
    strcat(result, greeting); strcat(result, name);
    printf("%s\n", result);
    return 0; 
}

Почему код выше работает без ошибок при том, что `malloc()` выделил недостаточное количество памяти?
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что C не контролирует использование памяти программой. Любой контроль на совести разработчика.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вы лезете не в свою память. Программа может упасть, вы можете перетереть значение каких-то других ваших переменных.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы