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

Почему new вызывает std::bad_alloc? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ВЕТВЛЕНИЯ В C++ http://www.cyberforum.ru/cpp-beginners/thread989766.html
Даны вещественные x, y, z. Вычислить: U= Выполнить задания двумя способами: с использованием оператора if и с использованием условного оператора ?.
C++ 1.#QNAN #include "stdafx.h" #include "locale" #include "cstdlib" #include "cmath" #include "iostream" using namespace std; //Заполнение массива рандомных значений--------------------------------------- double rnd(double *rndmas, int n) { http://www.cyberforum.ru/cpp-beginners/thread989761.html
C++ Ошибка линковки LNK2001. Неразрешенный внешний символ
Здравствуйте, пытаюсь сделать статический метод, в котором используется статическая переменная. Вроде бы все сделал как по книге, но при линковке выскакивает ошибка 2001. Подскажите, что я делаю не так. Файл GetPath.h #pragma once #include "StdAfx.h" class GetPath { public: GetPath(void); ~GetPath(void);
C++ Повернуть массив
Дано натуральное число n, массив целых чисел размером nxn. Преобразовать массив, осуществив поворот элементов вокруг его центра на 90 градусов против часовой стрелки. за ранее премного благодарен.
C++ Не могу разобраться с кодом (Указатели) http://www.cyberforum.ru/cpp-beginners/thread989732.html
Всем салют! Решил освоить С++. Обучение прохожу сам по книге Лафоре "ООП в С++". Разобрал полкниги, вопросов не возникало до главы "Указатели". В книге приведен пример кода: // englptr.cpp // доступ к членам класса через указатель #include <iostream> using namespace std; /////////////////////////////////////////////////////////// class Distance {
C++ Ввести файл F из 11 элементов. Найти произведение индексов элементов файла больших семи задачи на типизированные файлы, пожалуйста помогите! 1. Ввести файл F из 11 элементов. Найти произведение индексов элементов файла больших семи. подробнее

Показать сообщение отдельно
Charley
5 / 5 / 0
Регистрация: 11.06.2012
Сообщений: 173

Почему new вызывает std::bad_alloc? - C++

27.10.2013, 19:20. Просмотров 811. Ответов 3
Метки (Все метки)

Скомпилил данные исходники в visual studio 2008. Получил ошибку в конструкторе whirlpool():
функция gf8mul умножает многочлены над полем 2^8:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//main.c
#include "stdafx.h"
#include "whirlpool.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    whirlpool a(6), c(4);
    a.buffer[0]=0, a.buffer[1]=1, a.buffer[2]=1, a.buffer[3]=0, a.buffer[4]=1, a.buffer[5]=1;
    c.buffer[0]=1, c.buffer[1]=0, c.buffer[2]=0, c.buffer[3]=1;
    a.gf8mul(a, c);
    system("pause");
   return 0;
}
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//whirlpool.cpp
#include "stdafx.h"
#include "whirlpool.h"
 
using namespace std;
 
bool whirlpool::isnull(whirlpool a)
    {
    int i;
    for (i=0; i<a.len; i++)
    {
        if (a.buffer[i]&1)
            return false;
    }
    return true;
    }
 
whirlpool whirlpool::operator<< (int k)
    {
        int i=0, j=0, old_len=len;
        int *temp = new int[len];
       
        for (i=0; i<old_len; i++)
            temp[i] = buffer[i];
        //удалить buffer
        buffer = new int[old_len+k];
        len=old_len+k;
 
        for (i=0; i<k; i++)
           buffer[i]=0;
 
        for (i=k; i<len; i++)
           buffer[i]=temp[i-k];
 
    return *this;
    }
 
whirlpool whirlpool::operator>> (int k)
    {
        int i, j;
 
        for (j=0; j<k; j++)
        {
            for (i=1; i<len; i++)
               buffer[i-1]=buffer[i];
 
            buffer[len-1]=0;
        }
        len=len-k;
        return *this;
    }
 
whirlpool whirlpool::operator=(whirlpool a)
{
    int i=0;
    len=a.len;
    for (i=0; i<len; i++)
        buffer[i]=a.buffer[i];
 
    return *this;
}
 
whirlpool operator^(whirlpool a, whirlpool b)
{
    int i, min_len=0, max_len=0;
    whirlpool temp,_a,_b;
    _a=a;
    _b=b;
 
    if (_a.len>_b.len)
    {
        min_len=_b.len;
        max_len=_a.len;
 
        for (i=0; i<min_len; i++)
            _a.buffer[i]=_a.buffer[i]^_b.buffer[i];
 
        temp=_a;
    } else
        {
            min_len=_a.len;
            max_len=_b.len;
 
        for (i=0; i<min_len; i++)
            _b.buffer[i]=_b.buffer[i]^_a.buffer[i];
       
        temp=_b;
        }
   
    i=temp.len-1;
        while(i>0)
        {
            if(temp.buffer[i]==0)
            {
                temp.len--;
            }
            if(temp.buffer[i]==1)
            {
                i=0;
            }
            i--;
        }
 
    return temp;
}
 
 
 
    whirlpool whirlpool::gf8mul(whirlpool a, whirlpool b)
    {
    int i=0;
    whirlpool _a;
    whirlpool _b;
    _a=a;
    _b=b;
    whirlpool c(a.len);
    for (i=0; i<c.len; i++)
    c.buffer[i]=0;
   
    const whirlpool pol2(9);
    pol2.buffer[0]=1, pol2.buffer[1]=0, pol2.buffer[2]=1, pol2.buffer[3]=1, pol2.buffer[4]=1, pol2.buffer[5]=0, pol2.buffer[6]=0, pol2.buffer[7]=0, pol2.buffer[8]=1;
   
    while (isnull(_b) == false)
    {
        if (_b.buffer[0]& 1)
        {
            c = c^_a;
        }
       
        _b = _b >> 1;
        _a = _a << 1;
 
        if (_a.len > 8)
        {
            _a = _a^pol2;//0x11d=100011101
        }
    }
 
    return c;
    }
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
//whirlpool.h
#pragma once
#include <iostream>
#include <fstream>
#include <iostream>
 
using namespace std;
 
class whirlpool
{
public:
 
    int *buffer;
    int len;
   
    whirlpool()
    {
        len=1;
        buffer = new int[len]; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!здесь ошибка std::bad_alloc
    }
 
    whirlpool(int length)
    {
        len = length;
        buffer = new int[len];
    }
   
bool isnull(whirlpool);
whirlpool operator=(whirlpool);
whirlpool operator<< (int);
whirlpool operator>> (int);
friend whirlpool operator^(whirlpool,whirlpool);
whirlpool gf8mul(whirlpool, whirlpool);
~whirlpool()
{
}
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru