LinuxForum.Fans
Тема

Ошибка сегментирования

Автор: l_cho 3 сообщений 1849 просмотров
#374054

Добрый день , прочел что ошибка эта возникает где-то на бинарном уровне. Но почему нигде информацию не могу найти. Вот кусок кода , который не может открыть именно эту папку. Подскажите почему так ???

text
#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

int main(){ DIR *dir; struct dirent *entry; dir = opendir("/var/lib/dkms/virtualbox/4.1.18/source/vboxpci/include/iprt/nocrto");

if (!dir) { perror("diropen"); closedir(dir);

while ( (entry = readdir(dir)) != NULL) { printf("%d - %s [%d] %d\n", entry->d_ino, entry->d_name, entry->d_type, entry->d_reclen); } }; return 0;}

Используйте теги code, нервные клетки и родственники людей читающих это будут вам благодарны. Fat-Zer

#374062

Во-первых, отформатируй код нормально.
Во-вторых, if (!dir) не закрыт и после perror должен сразу следовать выход по exit(EXIT_FAILURE). сегфолт возникает на readdir из-за того, что ты передаёшь ему нулевой дескриптор.


что такое сегфолт можно почитать хотя бы в той же вики http://ru.wikipedia.org/wiki/Segfault

#374063
"l_cho" написал:
if (!dir) {
perror("diropen");
closedir(dir);

while ( (entry = readdir(dir)) != NULL) {

Наверно вы забыли закрыть отрицательный if. Получается так: Открываем директорию, если открыто с ошибкой закрываем и начинаем что то из нее читать.

Войдите или зарегистрируйтесь, чтобы ответить.