|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.03.2013, 13:24 | #1 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Сортировка массива строк.Компилируется, но вылетает.
В файле f1.dat содержатся 5550 строк, самая длинная из которых 648 символов, нужно их отсортировать методом пузырька по алфавиту и вывести в f2.dat.
Моё решение состоит в следующем: 1)создаём массив строк нужного размера 2)создаём массив указателей размером равным количеству строк 3)считываем данные в массив строк 4)расставляем указатели на каждую строку по порядку(далее обращаемся к строкам через них) 5)сортируем массив указателей методом пузырька 6)выводим массив строк через указатели в файл f2.dat Компилируется без ошибок, но при запуске вылетает.Вылет происходит сразу при входе в main. Отладчик пишет, что программа вызвала нарушение доступа(ошибку сигментации). Жопой чувствую, что ошибка в какой то мелочи, но второй день не могу её найти. Ткните носом Код:
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
16.03.2013, 13:43 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Код:
I'm learning to live...
|
|
16.03.2013, 14:10 | #3 | ||
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Цитата:
Цитата:
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
||
16.03.2013, 14:26 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
int main(). Дальше не смотрел.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
16.03.2013, 14:50 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Тебе нужно помимо сказанного в посте 4 еще и отладку по шагам проделать, чтоб понять где на какой строке ошибка.
I'm learning to live...
|
16.03.2013, 15:23 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Stilet, не соглашусь - зачем выделять память? Это же массив указателей, которые ссылаются на области памяти другого массива. Отладка определенно нужна.
Че Гевара, неплохо бы "чистить" строки после занесения в массив, т.к. на конце строки сохраняются символы переноса. Получается, что одна и та же строка в середине файла и в конце будет отличаться последними байтами. Кстати, на маленьком тестовом файле программа работает (GCC Code::Blocks). Только вывод работает не совсем так, как нужно, как раз из-за сохраненных символов переноса, т.е. последняя строка "склеивается" с какой-то другой из-за отсутствия у нее этих самых символов. Попробуйте чуть увеличить len (на несколько символов) для того, чтобы считывать 648 символов строки, 1-2 символа переноса, и было место для нулевого байта. Еще одно предположение - программа не может выделить 5550 * 650 байт, т.е. нужно динамически выделять память под массив. Еще одно - добился падения программы, когда указал количество строчек больше, чем есть в файле. Вообще, мне не нравится такая жесткая привязка как к длине строки, так и к количеству строк. Может оказаться, что все предположения верны
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 16.03.2013 в 15:51. |
16.03.2013, 15:32 | #7 |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Без разницы, ничего не меняет.
Не помогло. В первую очередь сделал, ошибка вылетает сразу после запуска отладчика. Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
16.03.2013, 15:59 | #8 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Не может твоя программа вылетать сразу же, если только не повреждены используемые у тебя хедеры. Цитата:
I'm learning to live...
|
||
16.03.2013, 18:14 | #9 | |
Форумчанин
Регистрация: 25.09.2012
Сообщений: 182
|
Цитата:
Всем спасибо)))))))) Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan. |
|
16.03.2013, 18:25 | #10 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Я прокомпилил твой код, нашёл это. Дальше разбираться не стал (копаться в чужом коде за "просто так", желания не возникло). Тем болеее, что он, для меня , ценности не представляет.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
delphi потоки, компилируется и вылетает. | drozd_amm | Помощь студентам | 1 | 25.12.2012 21:46 |
Сортировка массива строк | МихаилБ | Помощь студентам | 2 | 25.06.2011 21:41 |
сортировка массива строк. | daruwanov | Общие вопросы C/C++ | 6 | 21.09.2010 19:57 |
сортировка массива строк в Си | SpLIne | Общие вопросы C/C++ | 2 | 15.04.2010 16:17 |
Сортировка массива строк | StanPBH | Помощь студентам | 9 | 24.04.2007 00:34 |