2013-12-13 2 views
0

Я реализую абстрактный тип данных Map для класса моих алгоритмов, и нас попросят реализовать его с использованием 2 массивов.Ошибка выполнения, неспособная определить причину

Я сделал реализацию прошлой ночью, и все сработало хорошо (когда мы отправляем задание онлайн, оно проверяется с помощью автотестов), и оно проходило каждый тест. Тогда мне нужно было реализовать его с помощью бинарного поиска, и я это сделал.

Сегодня утром, когда я запустил код, он дал мне ошибку времени выполнения, и я думаю, что причиной этого является мой конструктор копирования, потому что, когда я прокомментировал это, код работал нормально, но мой конструктор копий точно так же, как мой наставник реализовал его ,

Вот код, он выходит из строя на:

ArrayMap<string,string> m; 
    string s1("Sarajevo"), s2("Zagreb"); 
    m[s1] = "BiH"; 
    m[s2] = "Hrvatska"; 
    { 
    ArrayMap<string,string> m2(m); 
    ArrayMap<string,string> m3; 
    m3=m; 
    m.empty(s1); 
    cout << m2.numOfElements() << " "; 
    cout << m2[s1] << " "; 
    cout << m3.numOfElements() << " "; 
    cout << m3[s1] << " "; 
    } 
    cout << m.numOfElements(); 
    cout << " '" << m[s1] << "' "; 
    m.obrisi(); 
    cout << m.numOfElements(); 
    cout << " '" << m[s2] << "'"; 

А вот конструктор:

ArrayMap(const NizMapa<TypeOfKey, TypeOfValue>& rhs){ 

    _capacity = rhs._capacity; 
    _numOfElements = rhs._numOfElements; 

    _arrayK = new TypeOfKey[_capacity]; 
    _arrayV = new TypeOfValue[_capacity]; 

    for(int i = 0; i<_numOfElements; i++){ 
     _arrayK[i] = rhs._arrayK[i]; 
     _arrayV[i] = rhs._arrayV[i]; 
    } 

    } 

EDIT:

ВПЧЭ

ArrayMap<string,string> m; 
    string s1("Sarajevo"), s2("Zagreb"); 
    m[s1] = "BiH"; 
    m[s2] = "Hrvatska"; 
    ArrayMap<string,string> m2(m); 

    cout << m2[s1] << " " << m2.numOfElements(); 
    /* When I do just this it works fine, but when combined with others it crashes the   program*/ 

EDIT: http://pastebin.com/vXdBTs4nЭто реализация класса: NizMapa является ArrayMap _kapacitet является _capacity _brojE является _numOfElements TipKljuca является TypeOfKey TipVrijednosti является TypeOfValue методы: obrisi пуста/удалить (2 версии)

Примечание: это не является бинарная поисковая версия, это последовательный поиск. Если какая-либо дополнительная информация необходима, пожалуйста, спросите, это важно. Спасибо заранее!

+0

Точная ошибка будет в порядке. ;) – Devolus

+0

Это приложение потребовало, чтобы среда выполнения завершила его необычным способом. Пожалуйста, свяжитесь с нами ... – Matsura

+2

Вы также реализовали 'operator ='? – Henrik

ответ

0

Здесь вы выделяете с помощью _capacity

_capacity = rhs._capacity; 
_numOfElements = rhs._numOfElements; 

_arrayK = new TypeOfKey[_capacity]; 
_arrayV = new TypeOfValue[_capacity]; 

Burt здесь используется _numOfElements

for(int i = 0; i<_numOfElements; i++){ 

как граница цикла. Таким образом, эти два, вероятно, не совпадают, и вы пишете за границей массива, если _numOfElements>_capacity.

+0

Вместимость емкости - это МАКСИМАЛЬНОЕ количество элементов, а numOfElements - это текущее число, мне не нужно копировать больше элементов. Я считаю, – Matsura

+3

Верить и отлаживать - это две разные вещи. :) И вы не указали полный код, так что это будет моя догадка. – Devolus

+0

не поможет ли это вообще: Нет Точка останова с номером 2. В __cxa_throw()() Продолжение ... Программа завершилась с кодом 03. Debugger закончил со статусом 0 – Matsura

Смежные вопросы