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

Проверить на выход за границы массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка очереди <char> http://www.cyberforum.ru/cpp-beginners/thread856300.html
помогите пож с сортировкой очереди queue очередь состоит из латинсколо алфавита. нужно отсортировать по возростанию и по спаданию .. типо от а до z и от z до а если можно через <algoritm> ну или через масив char (была идея с асхи кодами но не вышло у меня) char a = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',...
C++ тип time_t Нужно ввести 2 переменные типа time_t с клавиатуры , потом переконвертировать их в строки и записать в файл. В процессе исполнения программы вылетает ошибка: Debug assertion failed. Expression: invalid null pointer. Что за такой невалидный нуль указатель не пойму. Даты вводил и в таком виде(25.11.2012 20:00:00) и в таком (Web Feb 13 16:06:10 2013) результат не меняется, все равно программа... http://www.cyberforum.ru/cpp-beginners/thread856297.html
C++ Символьные вычисления
Есть задача создания символьных вычислений с помощью C++. Все подобные приложения написаны на Lisp. Думал разобраться с SymbolicC++3 но документации нет вовсе и вся библиотека не компилируется а только отрывки. Расстроился и подумал что вот можно организовать взаимодействие C++ с консольным приложением Maxima, я бы с легкостью получил результат, если бы использовал php функцию shell_exec, но...
Матрица: определить количество строк, не содержащих ни одного нулевого элемента C++
для решения задач: 1) определить количество строк, не содержащих ни одного нулевого элемента; 2) найти максимальное из чисел, встречающихся в заданном массиве более одного раза. #include "stdafx.h" #include <conio.h> #include <stdio.h> int main() {
C++ Объявление объекта класса из DLL C++ Builder 6 http://www.cyberforum.ru/cpp-beginners/thread856274.html
Добрый день! Пишу программу которая вызывает функции из DLL с явной загрузкой. Полазил по инету, вроде все правильно делаю. Когда объявляю новый объект класса в проекте, компилятор ругается на эти 3 строчки в файле Unit1.h: SymbString* DLL_EI SymbStroka=new SymbString; BinString* DLL_EI BinStroka=new BinString; SymbString* DLL_EI DelStroka=new SymbString; Вот сама библиотека. Файл...
C++ Моя первая консольная игра :D Всем доброго времени суток! Сегодня я хочу показать вам свою первую игру, правда пока она работает в консоли :( В ней вы можете прыгать и ходить влево, вправо. Но у игры есть один баг: после прыжка вы передвигаетесь на одну клетку вправо, я пока не разобрался с этой проблемой. Вот код и видео: //////////////////////////////////////// //***Furyaev Stanislav*** // //***Moscow,... подробнее

Показать сообщение отдельно
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
09.05.2013, 13:30  [ТС]     Проверить на выход за границы массива
Когда я в main()'е использую оператор=, то при завершении, когда уже вызываются деструкторы, вылетает ошибка. Пошагово прогонял, вызывается деструктор Array, но дальше, в деструктор моего созданного класса, он даже не заходит.
C++
1
2
3
4
5
6
7
int main() {
Array<Complex<int>, 4> obj2(3), obj(3);
    cin >> obj;
    cout << endl << obj;
    obj2 = obj;
return 0;
}
Конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <class T, size_t size>
Array<T, size> :: Array(const Array<T, size> &arrayForCopying) {
        bool label = true;
        Ex<T, 5> obj(arrayForCopying.currentSize);
 
        for (size_t i = 0; i < arrayForCopying.currentSize; i++) 
            if (obj.init(arrayForCopying.aPtr[i], i) == 0)
                label = false;
        
        if (label) {
            aPtr = obj.get();
            currentSize = arrayForCopying.currentSize;
            maxSize = arrayForCopying.maxSize;
        }
}
оператор =
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <class T, size_t size>
Array<T, size> & Array<T, size> :: operator = (const Array<T, size> &arrayForAssign) {
    if (this != &arrayForAssign) {
        bool label = true;
        Ex<T, 5> obj(arrayForAssign.currentSize);
 
        for (size_t i = 0; i < arrayForAssign.currentSize; i++) 
            if (obj.init(arrayForAssign.aPtr[i], i) == 0)
                label = false;
        
        if (label) {
            delete [] aPtr;
            aPtr = obj.get();
            currentSize = arrayForAssign.currentSize;
            maxSize = arrayForAssign.maxSize;
        }
        return *this;
    }
    return *this;
}
Деструктор Array:
C++
1
2
3
4
template <class T, size_t size>
Array<T, size> :: ~Array() {
    delete []  aPtr;
}
Метод init
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <class T>
int Ex<T> :: init(const T &elem, size_t n) {
    try {
        new (p + n) T(elem);
        return 1;
    }
    catch(...) {
        for (int i = n; i >= 0; i++) {
            p[i].~T();
        }
        operator delete[](p);
        
        return 0;
    }
}
и деструктор класса Ex
C++
1
2
3
4
template <class T>
Ex<T> :: ~Ex() {
    //delete [] p;
}
Добавлено через 1 час 18 минут
нашел свои ошибки, исправил, вроде все работает, но мб что-то нужно будет исправить:
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
45
46
47
48
49
50
51
template <class T, size_t size>
Array<T, size> :: Array(size_t length) {
    maxSize = size;
    currentSize = length < size ? length : maxSize;
    aPtr = reinterpret_cast<T*>(operator new[](length * sizeof(T)) );
}
template <class T, size_t size>
Array<T, size> :: Array(const Array<T, size> &arrayForCopying) {
    bool label = true;
    Ex<T, 5> obj(arrayForCopying.currentSize);
 
    for (size_t i = 0; i < arrayForCopying.currentSize; i++) 
        if (obj.init(arrayForCopying.aPtr[i], i) == 0)
            label = false;
        
    if (label) {
        aPtr = obj.get();
        currentSize = arrayForCopying.currentSize;
        maxSize = arrayForCopying.maxSize;
    }
}
template <class T, size_t size>
Array<T, size> :: ~Array() {
    for (int i = (currentSize - 1); i >= 0; i--) {
        aPtr[i].~T();
    }
    operator delete[] (aPtr);
}
template <class T, size_t size>
Array<T, size> & Array<T, size> :: operator = (const Array<T, size> &arrayForAssign) {
    if (this != &arrayForAssign) {
        bool label = true;
        Ex<T> obj(arrayForAssign.currentSize);
 
        for (size_t i = 0; i < arrayForAssign.currentSize; i++) 
            if (obj.init(arrayForAssign.aPtr[i], i) == 0)
                label = false;
        
        if (label) {
            int i = arrayForAssign.currentSize - 1;
            for (; i >= 0; i--) {
                aPtr[i].~T();
            }
            operator delete[] (aPtr);
            aPtr = obj.get();
            currentSize = arrayForAssign.currentSize;
            maxSize = arrayForAssign.maxSize;
        }
    }
    return *this;
}
 
Текущее время: 03:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru