Просмотр новости

Найдите то, что Вас интересует

Почему надо проверять malloc на NULL

Дата публикации: 21-06-2026 11:34:18



Вообще выделение памяти проверять.А вот потому что:#include <stdio.h>
int main()
{
unsigned char *a = NULL;
int b = 0;
unsigned long n = (unsigned long)&b;

printf("b = %d, n = %lu\n",b,n);
a[n]=1;
printf("b = %d\n",b);
return 0;
}
Запуск$ gcc nullptr.c -o nullptr
$ ./nullptr
b = 0, n = 140731726099148
b = 1
Запускалось в 64-битном (x86_64) Linux. Как видно, никаких сегфолтов и прочих ошибок. Конечно, адрес в районе 127 Тб в примере далеко за пределами доступного почти на всех компьютерах, но нет никаких гарантий, что на какой-то системе с каким-то компилятором и настройками среды значение не окажется более доступным. Могут быть и другие архитектуры (32-битные например), если запускать от root'а, то в начало может быть разрешена запись и там иметься память процесса. Или ещё какие-то варианты. shdown, monk, liksys, Xenius - я думаю вам понравится. Пример сочинился по ходу чтения обсуждения Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий)



 c, malloc, безопасность

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1segv при элементарном обходе массива0023-06-2026
2В FreeBSD тоже zerocopy-баг с записью в файлы которые нельзя записывать0020-06-2026
3fz &#8211; сборка ассемблера и C без make/cmake, одна команда, парал0018-05-2026
4Два винта, две системы: пропробсить новую в старую0021-06-2026
5Linux 7.2 内核完全移除 strncpy 函数 0022-06-2026
6wget, curl - не получается скачать файл с пробелами в имени0001-06-2026
7Ищу работу (десктоп / бэкенд, опенсорс приветствуется)0021-06-2026
8Странности с nvme Transcend TS2TMTE220S0021-06-2026
9домашний сервер без движущихся частей0021-06-2026
10Поиск всех путей на графе (Небольшой тест. Часть 2)0020-06-2026

Классификация: Мнения. Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 0. Источник: www.linux.org.ru.