0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 6

Heap corruption detected

01.11.2014, 20:48. Показов 2615. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка возникает после отработки программы
Заголовочный файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include<iostream>
#include<valarray>
#include<string>
 
using namespace std;
 
class Wine
{
    typedef valarray<int> ArrayInt;
    typedef pair<ArrayInt, ArrayInt> PairArray;
    string label;
    PairArray bot_ye;
    int years;
public:
    Wine();
    Wine(const char*l, int y, const int yr[], const int bot[]);
    Wine(const char* l, int y);
    void GetBottles();
    void Show();
    string& Label();
    int sum();
};
Файл реализации:
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
#include"Wine.h"
Wine::Wine() :label(), bot_ye()
{
    years = 0;
}
Wine::Wine(const char*l, int y, const int yr[], const int bot[]) : label(l), bot_ye({ y}, {y})
{
    
    years = y;
    for (int i = 0; i < years; i++)
    {
        bot_ye.first[i]=yr[i];
        bot_ye.second[i] = bot[i];
    }
    
}
Wine::Wine(const char* l, int y) :label(l), bot_ye({ y }, { y })
{
    years = y;
    
}
void Wine::GetBottles()
{
    for (int i = 0; i < years; i++)
    {
        cout << "Enter year: ";
        cin >> bot_ye.first[i];
        cout << "Enter bottle: ";
        cin >> bot_ye.second[i];
    }
}
void Wine::Show()
{
    cout << "Label: " << label<<endl;
    cout << "Year" << "\tBottle\n";
    for (int i = 0; i < years; i++)
    {
        cout << bot_ye.first[i] << "\t" << bot_ye.second[i] << endl;
    }
}
string& Wine::Label()
{
    return label;
}
int Wine::sum()
{
    int res=0;
    for (int i = 0; i < years; i++)
    {
        res += bot_ye.second[i];
    }
    return res;
}
Основная программа:
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
#include<iostream>
#include"Wine.h"
int main()
{
    using std::cin;
    using std::cout;
    using std::endl;
    cout << "Enter name of wine: "; // ввод названия вина 
    char lab[50];
    cin.getline(lab, 50);
    cout << "Enter number of years: "; // ввод количества годов сбора винограда 
    int yrs;
    cin >> yrs;
    Wine holding(lab, yrs); // сохранение названия, лет, 
    // создание массивов из yrs элементов 
    holding.GetBottles(); // предложение ввести год и количество бутылок 
    holding.Show(); // вывод содержимого объекта 
    const int YRS = 3;
    int y[YRS] = { 1993, 1995, 1998 };
    int b[YRS] = { 48, 60, 72 };
    // Создание нового объекта, инициализация 
    // с использованием данных из массивов у и b 
    Wine more("Gushing Grape Red", YRS, y, b);
    more.Show();
    cout << "Total bottles for " << more.Label() // используется метод Label() 
    << ": " << more.sum() << endl; // используется метод sum() 
    cout << "Bye\n";
    return 0;
}
Каким образом происходит выход та приделы массива не пойму.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2014, 20:48
Ответы с готовыми решениями:

HEAP CORRUPTION DETECTED
Собственно такую ошибку выдаёт: &quot;HEAP CORRUPTION DETECTED: after Normal block (#220) at 0x001970B8. CRT detected that the application...

Heap Corruption detected (
что не правильно? запускаю и ошибка вылетает как на предидущей картинке template&lt;typename TT&gt; class Matrix { public:...

Heap corruption detected
Heap corruption на строке 93 при первом же выполнении цикла. Из-за чего? #include &lt;locale.h&gt; // для возможности вывода кириллицы ...

1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12900 / 6760 / 1815
Регистрация: 18.10.2014
Сообщений: 17,094
01.11.2014, 23:31
Цитата Сообщение от VitalikFreeMan Посмотреть сообщение
Каким образом происходит выход та приделы массива не пойму.
А отладчиком кто будет пользоваться? Пушкин?

Одна ошибка очевидна. Инициализаторы '()' и '{}' для класса 'valarray' значат совершенно разные вещи. Вот это

C++
1
valarray<int> v(5);
создает массив размера 5, заполненный нулями. А вот это

C++
1
valarray<int> v{5};
создает массив размера 1 с единственным элементом, равным 5.

Поэтому ваш инициализатор 'bot_ye({y}, {y})' создает пару 'bot_ye' с двумя массива размера 1. А вы потом во всю камаринскую лезете в эти массивы по индексам от 0 до y-1. Разумеется, будет выход за пределы массива.

Поэтому если вам уж так не терпится создать векторы в списке инициализации конструктора, то 'bot_ye(ArrayInt(y), ArrayInt(y))'.

Добавлено через 6 минут
В С++11 это можно еще сделать как 'bot_ye(piecewise_construct, forward_as_tuple(3), forward_as_tuple(3))', но смысла в этом нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2014, 23:31
Помогаю со студенческими работами здесь

Heap corruption detected
При попытке очистить память выдает &quot;Heap corruption detected&quot;. Помогите пожалуйста( // labanext.cpp : Defines the entry point for the...

HEAP CORRUPTION DETECTED
Доброго времени суток, господа. Только начал изучать ООП и столкнулся с проблемой. Нужно написать класс, содержащий строку символов,...

Heap Corruption Detected
Выдает ошибку HEAP CORRUPTION DETECTED, судя по всему где то ошиблась с распределением памяти Предполагаю, что ошибка прячется в районе...

HEAP CORRUPTION DETECTED
Не могу понять, почему выдает такую ошибку, когда я освобождаю память: &quot;HEAP CORRUPTION DETECTED: after Normal block&quot;. Я вроде нигде...

heap corruption detected
имеется класс CStr - строка, в нём есть конструктор CStr CStr::CStr(char *s) { length = 0; while (s) length++; str = new...


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

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

Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru