<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Segmentation fault в fopen</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html</link>
    <description>Начинаю изучать Си и сразу попал в какую-то необъяснимо тупую ситуацию:&lt;br&gt;Пытаюсь читать файл, выдаёт segmentation fault при открытии файла.&lt;br&gt;компилю всё это дело так: gcc test.c -o test&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;int main(int argc, char *argv&#091;&#093;)&#123;&lt;br&gt;printf(&quot;Content-Type: text/html; charset=utf-8&#092;n&#092;n&quot;);&lt;br&gt;printf(&quot;hello world. Всем привет.&#092;n&quot;);&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;FILE *fp;&lt;br&gt;fp = fopen(&quot;text.txt&quot;,&quot;r&quot;); // &amp;lt;-- Segmentation Fault&lt;br&gt;&lt;br&gt;fclose(fp);&lt;br&gt;&lt;br&gt;return 0;&lt;br&gt;&#125;&#125;&lt;br&gt;&lt;br&gt;P.S. Я полный нуб, не могу разобраться. ни найти, потому что не понимаю что искать. Кажется что дело в ограничении памяти, но почему и как это дело работает мне непонятно. ((&lt;br&gt;</description>

<item>
    <title>Segmentation fault в fopen (vic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#7</link>
    <pubDate>Tue, 30 Dec 2008 00:23:55 GMT</pubDate>
    <description>&amp;gt;Начинаю изучать Си&lt;br&gt;&amp;gt;компилю всё это дело так: gcc test.c -o test &lt;br&gt;&lt;br&gt;советы для начинающих изучать С:&lt;br&gt;1. использовать опцию компилятора -Wall&lt;br&gt;2. изучить книгу создателей языка:&lt;br&gt;Автор: Брайен Керниган, Деннис Ричи&lt;br&gt;Название: Язык программирования Си&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (Michelnok)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#6</link>
    <pubDate>Mon, 29 Dec 2008 23:08:53 GMT</pubDate>
    <description>&amp;gt;Большое спасибо. А может segfault вылетать не при закрытии файла, а при &lt;br&gt;&amp;gt;открытии? &lt;br&gt;&lt;br&gt;Попробуйте передать в fopen мусор вместо указателя на имя файла.&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#5</link>
    <pubDate>Mon, 29 Dec 2008 21:58:38 GMT</pubDate>
    <description>Маловероятно, если бы была ошибка в системном open, то ваша система вообще бы не загрузилась :)&lt;br&gt;Воспользуйтесь strace или gdb и увидите на каком именно моменте происходит вылет. Для примера я добавил printf(&quot;fopen done&#092;n&quot;); между fopen и fclose и запустил с strace:&lt;br&gt;open(&quot;text.txt&quot;, O_RDONLY)            = -1 ENOENT (No such file or directory)&lt;br&gt;write(1, &quot;fopen done&#092;n&quot;..., 11fopen done&lt;br&gt;)         = 11&lt;br&gt;--- SIGSEGV (Segmentation fault) &#064; 0 (0) ---&lt;br&gt;Как видим open отработал и вернул код ошибки, а вылет произошёл уже позже, когда пытались закрыть неинициализированный хендлер.&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (vic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#4</link>
    <pubDate>Mon, 29 Dec 2008 21:48:50 GMT</pubDate>
    <description>&amp;gt;Большое спасибо. А может segfault вылетать не при закрытии файла, а при &lt;br&gt;&amp;gt;открытии? &lt;br&gt;&lt;br&gt;в общем нет, читайте man fopen&lt;br&gt;там описаны все ошибки которые возвращает эта функция устанавливая возвращаемый указатель в NULL, ошибка в таком случае будет указана в переменной errno.&lt;br&gt;&lt;br&gt;И еще, сразу отучайтесь считать что есть ошибка в системном вызове или в компиляторе, вероятность подобного 0.0000001&#037;, и 99.9&#037; что проблема в вашем коде.&lt;br&gt;&lt;br&gt;ЗЫ если в fopen случится segfault, то вы скорее об этом узнаете обнаружив что все зависло или ядро напишет в консоль &quot;паника, паника, паника&quot; и убьется :)&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (rumkin)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#3</link>
    <pubDate>Mon, 29 Dec 2008 20:57:00 GMT</pubDate>
    <description>Большое спасибо. А может segfault вылетать не при закрытии файла, а при открытии?&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (Michelnok)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#2</link>
    <pubDate>Sun, 28 Dec 2008 21:54:26 GMT</pubDate>
    <description>&amp;gt; FILE *fp; &lt;br&gt;&amp;gt; fp = fopen(&quot;text.txt&quot;,&quot;r&quot;); // &amp;lt;-- Segmentation Fault &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt; fclose(fp); &lt;br&gt;&lt;br&gt;Валится скорее всего в fclose, а не в fopen.&lt;br&gt;fclose (как минимум, в FreeBSD) принципиально не проверяет аргумент на NULL, предпочитая свалиться в segmentation fault. Это имеет смысл, подобные баги (отсутствие проверки на успешное открытие файла в данном случае) проявлялись сразу. Как уже отметили, привыкайте проверять результат.&lt;br&gt;</description>
</item>

<item>
    <title>Segmentation fault в fopen (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7803.html#1</link>
    <pubDate>Sun, 28 Dec 2008 03:00:32 GMT</pubDate>
    <description>Поздравляю, вы наткнулись на положенные всем начинающим грабли. Заучивайте два новых правила:&lt;br&gt;1. Всегда проверяйте результат вызова функций на возникновение ошибки&lt;br&gt;2. Перед использованием переменной, особенно указателя, убедитесь что она была должным образом инициализирована&lt;br&gt;Пример простой проверки:&lt;br&gt;if (fp) &#123;&lt;br&gt;      fclose(fp);&lt;br&gt;    &#125; else &#123;&lt;br&gt;      printf(&quot;Ошибка открытия файла&#092;n&quot;);&lt;br&gt;    &#125;&lt;br&gt;В отладке программ вам могут пригодится strace и gdb&lt;br&gt;</description>
</item>

</channel>
</rss>
