С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
#1

Signal 11 (SIGSEGV) - C++

29.11.2012, 22:53. Просмотров 3570. Ответов 11
Метки нет (Все метки)

То ли я дурак, то ли лыжи не едут.
Во время тестирования, прога проходит 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? Что от меня хотят и как с этим бороться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2012, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Signal 11 (SIGSEGV) (C++):

Program received signal SIGSEGV, Segmentation fault - C++
Когда запускаю дебагер: gdb ./preci Вюдает следуще. Я не могу понять с чем это могет быть связано. Код: GNU gdb 6.4.90-debian...

signal.h - C++
Доброго времени суток! Начал разбираться с сигналами и понял что как работать с ними под windows мало литературы... так вот, у меня есть...

Signal 11 в IDEONE.COM - C++
#include <iostream> #include <cmath> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include...

Ошибка выполнения signal 6 - C++
Происходит тут, причем вектор строк больше нигде не используется int n,m; cin>>n>>m; vector<string> tabl(n); Если...

Ошибка Signal: SIGABRT - C++
Здравствуйте. Есть задача. Вот условия: Вот мой код. Он компилируется, но перед выходом из программы вылезает ошибка (Signal:...

Runtime Error, Signal 6 - C++
вопрос скорее теоретический, чем практический чем может быть вызван RE с возвращенным значением 6? нашел англоязычный сайт с таблицей...

11
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,148
29.11.2012, 22:59 #2
С работой с памятью где-то проблемы, можно было и погуглить где за сигнал-то такой.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:02 #3
Учитывая, что ты даже кода не приложил - гуглить, учиться пользоваться отладчиком, смотреть стек вызовов.
0
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
29.11.2012, 23:05 #4
MrGluck, есть хорошая утилита. Называется valgrind. Работает на линуксах, выявляется ошибки работы с памятью, в твоем случае это что-то вроде выхода за пределы массива.
1
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.11.2012, 23:16  [ТС] #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);
    }
    . . .
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:27 #6
Опять ты не весь код выложил, и что у тебя за ересь в correct? Это ты так проверяешь что в первой строке число от 1 до 10?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.11.2012, 23:36  [ТС] #7
Проверил, стек вызовов корректно отрабатывает.

Добавлено через 1 минуту
Цитата Сообщение от Герц Посмотреть сообщение
Опять ты не весь код выложил, и что у тебя за ересь в correct? Это ты так проверяешь что в первой строке число от 1 до 10?
Что это именно число от 1 до 10. пусть бредово, зато букву или слово в переменную N не скушает.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.11.2012, 23:38 #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 )
Вуаля?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
30.11.2012, 04:16  [ТС] #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:~/Мои работы на С++$
0
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
30.11.2012, 04:20 #10
MrGluck, ну тогда только gdb: run, bt
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
30.11.2012, 04:40  [ТС] #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 при неудовлетворении входных данных?
0
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
30.11.2012, 04:50 #12
Цитата Сообщение от MrGluck Посмотреть сообщение
10 002
+ 11 переносов строки?
Цитата Сообщение от MrGluck Посмотреть сообщение
Мб они ожидают exception вместо if при неудовлетворении входных данных?
ну конечно же нет. И да, функция correct какая-то аццкая

Добавлено через 2 минуты
м.б. служебные данные типа время последнего изменения файла и т.д. что мешает выделить 2^n байт, например, 16384?
0
30.11.2012, 04:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 04:50
Привет! Вот еще темы с ответами:

Ошибка в xcode signal sigabrt, c++ - C++
Делаю класс матриц, при компиляции вылизает ошибка &quot;Thread 1: signal SIGABRT&quot;. Возникает в диструкторе класса. Matrix::~Matrix() ...

Signal: SIGABRT при delete[] - C++
Здравствуйте. Есть у меня такой метод: char *Request::addGetParam(char *link, const char *pKey, const char *val) const { char...

Странный SIGSEGV, или что зависит от порядка написания интерфейса класса - C++
Есть некий класс,и в нем в секции private записано следующее: private: Value *val; Types var_type; ...

Чем boost::signal отличается от std::function - C++
Чем boost::signal отличается от std::function ?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.