iliya
написал 30 апреля 2005 года в 19:48 (819 просмотров)
Ведет себя
как мужчина; открыл 13 тем в форуме, оставил 196 комментариев на сайте.
Пытаюсь скомпилить сишную программу в FreeBSD, она компилится , а после входа в функцию где
char buffer[64Kb];
она выдает Segmentation Fault.
Компилю очень просто $cc -lc -pthread -lssl -lcrypt test.c -o test
Да и Linux’e она работает нормально.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
видимо, срабатывает ограничение на размер stack segment. либо это такая специфика выделения памяти для stack в freebsd. на самом деле, там получается, что необходимо выделить дополнительно около 65кб (учитывая дополнительные переменные), что может и быть проблемой.
не лучше ли использовать malloc/free для выделения такого объёма памяти?
Да malloc лучше, только с ним таже проблема он не выделяет большие куски.
Там buffer просто буффер, а дальше идет тот самый malloc в коде и если вместо buffer[64Kb] сделать buffer[1Kb], то программа мрет на malloc’е.
ээммм.. кто-то глючит. осталось определить, кто и в чём. ;)
за примером использования — можно и в гугль, к примеру — в описании malloc.
и никаких тебе Segfault-ов.
Не, дело в другом.
Проверка есть, только почему я не могу выделить N Kb malloc’ом. (где N > 1 Kb)
Памяти 1Gb, свободна почти вся.
Мне malloc все время NULL возвращает.
А таже прога на Linux работает нормально.
В том то и вопрос почему так мало выделяет, может че с системой, но на ней apache пашет, а он куда больше чем моя прога жрет.
хммм.. ulimit?
ну и strace тебе в помощь…
с такими граблями я не встречался, так что — тут тогда тебе не помощник ;)
Ещё че хочу сказать.
Если прогу скомпилить в Linux ,и запустить в FreeBSD, то она работает и память выделяется и все в шоколаде, только в конце умирает из-за не правильного обработчика сигнала, но это фигня, так-то она пашет, а если на FreeBSD компилить , то мрет сука на char buffer[65536];
, меняем на char buffer[1024]; , проскакивает и на
if((data=(char*)malloc(65535))==NULL)
{
printf(«Fuck off. Not enought memory\n»);
exit(0);
}
Пишет «Fuck off. Not enought memory».
Не ну че за фигня.
Может я не так компилю????