Почему я могу использовать больше памяти, чем выделено? - PullRequest
2 голосов
/ 10 июля 2020

Я возился с функцией memset и сделал следующее:

int* p = malloc(sizeof(int);
memset(p, 0, 10000);

Мне было интересно, почему это действительно так. Я выделил только 5 байтов памяти, но с memset я могу занять 10000. Зачем мне даже mallo c памяти, если я могу занять больше, чем выделено? Может кто-нибудь объяснить?

Ответы [ 2 ]

4 голосов
/ 10 июля 2020

Это неопределенное поведение , как в, вы можете это сделать, но результаты не определены, как в непредсказуемом, так как в программе может возникнуть ошибка sh.

В этом случае вы может писать только в выделенный регион, или sizeof(int) * 5.

Почему C не мешает вам сделать это? Это потому, что философия языкового дизайна заключается в том, что программист знает, что делает, и не мешает ему.

0 голосов
/ 10 июля 2020

Мне было интересно, почему это действительно так.

Это не валидно.

Почему я должен даже mallo c память, могу ли я занять больше, чем выделено? Может кто-нибудь объяснить?

Потому что вы не можете.

Вы переполняете выделенную память. Поведение программы не определено.

...