Форум программистов, компьютерный форум CyberForum.ru

Signal 11 (SIGSEGV) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
29.11.2012, 22:53     Signal 11 (SIGSEGV) #1
То ли я дурак, то ли лыжи не едут.
Во время тестирования, прога проходит 6 тестов, на 7-ом возникает Run-time error с доп.информацией Signal 11 (SIGSEGV). При этом, набор входных данных явно не соответствует условию (указано, что длина входного файла 100013 букв, хотя макс. может быть лишь 100002 (2 буквы на кол-во строк + макс. длина строки (10000) * макс. кол-во (10)).
Добавил я проверку на входные параметры (если не выполняются - std::cerr + return), не помогло. Не могу понять, что от меня требуют и с чем эта ошибка может быть связана, ведь в 6 тесте размер входного файла был в 99301 символ и все корректно отработало, а у себя на компьютере результат выводило даже при длине намного большей, чем 100000 (т.е. на stack overflow грешить не получается).
What it is, what the hell? Что от меня хотят и как с этим бороться?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
29.11.2012, 22:59     Signal 11 (SIGSEGV) #2
С работой с памятью где-то проблемы, можно было и погуглить где за сигнал-то такой.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:02     Signal 11 (SIGSEGV) #3
Учитывая, что ты даже кода не приложил - гуглить, учиться пользоваться отладчиком, смотреть стек вызовов.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 23:05     Signal 11 (SIGSEGV) #4
MrGluck, есть хорошая утилита. Называется valgrind. Работает на линуксах, выявляется ошибки работы с памятью, в твоем случае это что-то вроде выхода за пределы массива.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
29.11.2012, 23:16  [ТС]     Signal 11 (SIGSEGV) #5
Цитата Сообщение от NoMasters Посмотреть сообщение
С работой с памятью где-то проблемы, можно было и погуглить где за сигнал-то такой.
Так прогуглил. Но в коде лишь пихается 10 строк из std::cin, длинной под 10000 в контейнер std::set, далее с ними идет работа. Дин. массивы не использовал, но главное, при своем собственном наборе данных я пробовал даже брать 20 строк в 20000 символов, все отрабатывало как часы. Где тут имеет место сбой памяти? Тем более, я устанавливал ограничение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
typedef std::set<std::string, comp> myset;
 
bool correct(const std::string &s)
{
    switch(s.size())
    {
        case 1 :
            return isdigit(s[0]) && s != "0";
            break;
        case 2 :
            return s == "10";
            break;
        default :
            return false;
            break;
    }
}
 
int main()
{
    std::size_t N;
    std::string checkStr;
    std::ifstream ifs("gentest.txt");
    //std::cin>> checkStr;
    ifs>> checkStr;
    if (correct (checkStr))
        N = std::atoi(checkStr.c_str());
    else
    {
        std::cerr<< "Bad input (number of lines must be integer between 1 and 10)\n";
        return 1;
    }
    std::string tmp;
    myset set_words;
    for (std::size_t i=0; i < N && ifs>> tmp; i++)
    {
        if (tmp.size() > 10000)
        {
            std::cerr<< "Bad input (size of lines must be less than 10000)\n";
            return 2;
        }
        set_words.insert(tmp);
    }
    . . .
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:27     Signal 11 (SIGSEGV) #6
Опять ты не весь код выложил, и что у тебя за ересь в correct? Это ты так проверяешь что в первой строке число от 1 до 10?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
29.11.2012, 23:36  [ТС]     Signal 11 (SIGSEGV) #7
Проверил, стек вызовов корректно отрабатывает.

Добавлено через 1 минуту
Цитата Сообщение от Герц Посмотреть сообщение
Опять ты не весь код выложил, и что у тебя за ересь в correct? Это ты так проверяешь что в первой строке число от 1 до 10?
Что это именно число от 1 до 10. пусть бредово, зато букву или слово в переменную N не скушает.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:38     Signal 11 (SIGSEGV) #8
C++
1
2
3
4
5
std::size_t N;
int check;
std::ifstream ifs("gentest.txt");
ifs >> check;
// if ( 0 < check && check <= 10 )
Вуаля?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
30.11.2012, 04:16  [ТС]     Signal 11 (SIGSEGV) #9
Цитата Сообщение от Герц Посмотреть сообщение
C++
1
2
3
4
5
std::size_t N;
int check;
std::ifstream ifs("gentest.txt");
ifs >> check;
// if ( 0 < check && check <= 10 )
Вуаля?
а если в gentest.txt идет что-то типа:

Код
eat_this_please
заместо числа, типа int?

Добавлено через 51 секунду
Это просто костыль для себя, т.к. уже не мог предположить, что же еще может вызывать Runtime error с неизвестными мне данными.

Добавлено через 4 часа 35 минут
Результат обработки в valgrind:
Код
danila@danila-VX6:~/Мои работы на С++$ g++ TaskB_1.cpp -o taskB -std=c++0x
danila@danila-VX6:~/Мои работы на С++$ valgrind --leak-check=yes ./taskB
==22673== Memcheck, a memory error detector
==22673== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==22673== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==22673== Command: ./taskB
==22673== 
sjadhldzkqzcfukaxejkvoqwutrmymxwsekgzafhqbijdfoxgwoonjxwdifbypudmyuirrmakzwtntzycvhxoucpsmmdjavqrvnkshkigthqvpuaqtbvggiwhlvtzrcofpyjyweofaitoihifbicnqapqkyvjaeeaticbytuoazqtewsvxveioknbfbihsvxmugkppmzgxhjiyrpvtubtmjdtawdjqubucjwwkngockhvyeyynmqvfdlaebftommjrlbptxxhtbpdqmiascejsbufsxvvuvrvrsghoyqngorixwslvuytsrewujvyjlrghnmipyihtwlzjdbipyaimgqxxfvsjsrzhhxynpwnrmtwfysxycddozbigrxrxtxgrlgnypqsakfverwbzqvshycnqyemdhxlmvdwubbjdziwsdgtblzlccjszxkchbrdhgnuztvspwfiwmekzhobmiuvojvaoiaxwyrwtgpdysjnqbyqvbthnjpwkppdmpdyknzvwdyjynifhxgszgxlwluyaejykmrpgifxgnwdonwcnqcyblgarrtvtdcljlzhzvvfkcqnfmriuprflgizpgczjkondgnbiwxfwzhiaassonfgusjwitgknzufgdsjmrqobemrycctyjflxpfkawvzkgbuydwvoccvbwbjvgdktwpopoqyfpzdpoyspqqphwcoqvijaruorsmtrnwsagfzhgfngsnmgycrfjoixdcnbtyctezcwkcvcqylczheudyerfvbgefkwvxyebbvcaroeztbsjnijyurxpfvaybbuoeomzsbtydygawmiswlqhjhnjucpcdbhtxsfffsnvmyuzuccwnyvzythxdggzibximisjsgqmysmkjuoxlviqfsibsjniahrmaonkfuuqzmduabpoaxmanqdaiqwunisitmtbunuxhleffsysbjmggjgsvbdqatiorscvwjqiipohwugqvhdjilmrhbzlrltzppdkwqylarpxnvsqucrbcjvsdneynawxbjsztlyrzbstjpwbkyhtktdeausjjznjsargmpufefgjzcplnksqdjksreuzzvxujznmqgmzlxnucguudopwaeykrstmlatfujirmjrfhebtjggtncsnwjnqrqelgdusqjfvjoawbnqzupxnnduauclotzmrmdrxdopwyrwmbpfwpxfdxfzprrnfsrgncjabybuymmikgpnrlunathxlnijococarwqrjcjyylcxmessqfwebslceelhsepoaxijdjzteiebgfalqfpvwkldifjazmlftutxyzerbdbginrbisyefppvqaqgxmbztnamjnubjxjefwanpvktbzqunsxmcrxauejeuvbvdduyaqrinkjlkkottwpfflaoggwtiwwtumkqpgguznjxyymskdunzrzkvuokbxcfxiczyctnymxemvbilcfyvldppcaciqbmpxaumrrossinwahsfmwlpmexfrleqciwgrwllbbfxtcwwrlejjrqazqfdjknsqzzvblaechndnulmftaocgpwsjhihmljzkwqpoxfglvhpkxpyiwndnttapllwyhxbousfnbcveeppcpzvexiqzcojiijjwqqcdpahhmlzeqhxurmgdpnbxtxmdpfsuqwfalufvujygfdkrhywfgeewasypbncdrcswogwarihktxtxxgraefezfpupglzusqzvwnywncogalebnjhytrexkcjtkvohhrwzxutifufsynhursszbqsxjuzxcqdrxgbuzrgtspsgqafzfpgztyqcucydvocmccaejhpszdtoxgttajzzvbpxeluhuzqacpnodlsmpjagdpnjyzvagpicaxrheemnowoddegdlaqhhmboljqnvyabbdamuasyyaqiunuwamwtuwolwahewyhqyonhkfjbmexoefaanqgdcogxfmlzcnbjamlsjpwazgnrumrlvhtjwubpabwswgfyfdnnxavohlkfsmwqywdkrhechurisifxlctpgfpfvjgydgxyucnaojtuslgiuqzccnluvqfacnjdthjzosokobyvmgqmwlmvtfbanqbhahmevewjzaeuuaqhggfvdpzhzcdbmfdftosghkffmktniximgzjyewevoymbjyquoubteflumgmrlddeafbxwrpzmkrosagskzbrmfjolqjtazgpyowhgqaikoentslyhiuepqylhnnbllleapkftohystxicfcajwsloheuotxnjmbywlqlcsitzkyecrtnlgekclpotlpiybqluzwydlhwlmhqffraayynoaixrdbebjmdzmxyyoilgsybxbsiuyhumtlrmknrnfaagbeeucueeaguapmarddwwhpzswguusdooyvdbdwuhqdcjeonerlflijszgvdbdiktcdksuyqzylritcajalddaserfadlcidrfrsivxeixgirvmvbcdysgocxytaydfhcaxachoalvmfumcbuowxqfywpdhitqqiyxwmnafmibohcjebvqfqkbrucaecgahznxrnwtxttgemvjrvbhqdkcbzwlhaqmpbiidqahwapymhdptpqfhskvwmbvwgfqxfdgmogccyrlisesdkkyqktzedrjqmbuydtbllxnmshvomoxikenqtbdtmzlphrbmlqzqsqsomuduaknwrkrxgpjdilmhfjgevbxsonhozplihakjdmpamsghhytmcfhyvojepzmitfugdrxbqoofhbxxsjjkkucdwsabxtycwbytlrkkswdehzisedqoofkrjtuwssrgiecpukbarsuwsjtrjhtbnsxcfudixmvsrxkltllngjhnsegtoafkvfxqzrfjrqbeylpfrplcftipxsfbhmpohfdnlziouwoqqafphaozfthhkszmggndirqihbmouxogabicizovsjbexyxdehosorckaehrsbxkbyssvbpposbqdlsxnuhdfnvcakkcensdhvdtvyxtguxlyppkejhcjkskdjposdevyhfsndidqywpqxkctnnqvblmxwodluldqzbjleaoqgpfpdzrmtmpswwvrgdqeedcucaxitpcnuegvbcoriahqhaorlvoitlathbjukbkoeblgpvdbevqiwdgjfizzrbpsmrkhntotiyalqxxccsjggzqppswparmxtzgqrseotkzqjhfqthponygbkxbxcwpgfcmaoqjyloreysvauzopbcizueqdqarhzxlrvnvtnqayjqtldxtlgbpkpbbxhwdsbneavrhjiriqwtkwbbcttvehwyzveqmeuvcfumntisvziggifdkmsngxtvyqxhibvqhjlqcfwzvtpdblfejofrwfaykxbxrpwwebrdhgygpeubbavmsmgxksulfkzzycnpelvmkrvxifxlhuezsdyergvbxsuvwtxsibqcfbifgplsbacqntfpgusypuiuyupdlimptqxoqfzoabjldazohpdfciqqieuslgfzanhoqrcszpvkemeimxvtjswgqwhcpiyicuqfwnwzdswvlkuooyxjrxnslzyxvpimypovnuokjxwablfyliqezjmcwnrnmolfjlzlvvvqzpfzyegjdlgudubfgpiczfptkhhonbsorfyrsendhofkpsqcbsqhuuylymbtyoiaqeptrjpqaqyslvvzjvnupqgdbgczzeadobyxtvhovvgmrurhxhdzbqmnqahucujmhpylqbucksrcpcroqoefcguogjzirggtlovbrpcjrbhiosfouyhuppsaewqbwfmbbcvtalvcugkurrwsrpscwnhkztgybrabhbygboeotsozfrtujjvyevnmvgvgkhkgnsseyfzxsvhyjmjnkmphttrnasajczbimtshutxwzvvjouvuspsnfxrrszmrxgawwypaypsqgm==22673== 
==22673== HEAP SUMMARY:
==22673==     in use at exit: 0 bytes in 0 blocks
==22673==   total heap usage: 47 allocs, 47 frees, 310,167 bytes allocated
==22673== 
==22673== All heap blocks were freed -- no leaks are possible
==22673== 
==22673== For counts of detected and suppressed errors, rerun with: -v
==22673== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
danila@danila-VX6:~/Мои работы на С++$
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
30.11.2012, 04:20     Signal 11 (SIGSEGV) #10
MrGluck, ну тогда только gdb: run, bt
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
30.11.2012, 04:40  [ТС]     Signal 11 (SIGSEGV) #11
Мне кажется, проблема все же связана с неправильными входными данными.
У меня краха не происходит, в этом весь трабл. Я не знаю условий его появления.
По заданию:
В первой строке записано целое число K (1 <= K <= 10). Далее записаны исходные K строк.
Каждая строка состоит из не более чем 10 000 маленьких латинских букв.
максимальное число символов в файле (при K = 10) 2 + 10 000 * 10 = 10 002.
При описании входных данных в Test7 пишет:
(file is too long, size = 100013)
Мб они ожидают exception вместо if при неудовлетворении входных данных?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 04:50     Signal 11 (SIGSEGV)
Еще ссылки по теме:

Fatal signal 11 (SIGSEGV) at 0x000000b4 Android
C++ Ошибка в xcode signal sigabrt, c++
C++ Signal: SIGABRT при delete[]

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
30.11.2012, 04:50     Signal 11 (SIGSEGV) #12
Цитата Сообщение от MrGluck Посмотреть сообщение
10 002
+ 11 переносов строки?
Цитата Сообщение от MrGluck Посмотреть сообщение
Мб они ожидают exception вместо if при неудовлетворении входных данных?
ну конечно же нет. И да, функция correct какая-то аццкая

Добавлено через 2 минуты
м.б. служебные данные типа время последнего изменения файла и т.д. что мешает выделить 2^n байт, например, 16384?
Yandex
Объявления
30.11.2012, 04:50     Signal 11 (SIGSEGV)
Ответ Создать тему
Опции темы

Текущее время: 09:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru