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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
#1

Ошибка кучи - C++

24.10.2013, 23:20. Просмотров 1282. Ответов 28
Метки нет (Все метки)

Выдает ошибку: "ОС Windows инициировала точку останова в Lab2.exe.Это может быть вызвано повреждением кучи и указывает на ошибку в Lab2.exe или в одной из загруженных им DLL."
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
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
const int n=9;
int sort(int *a)
{
    for(int i = 0; i < n; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        int tmp = a[i];
        for(int j = i + 1; j < n; ++j) // цикл выбора наименьшего элемента
        {
            if (a[j] <= tmp) 
           {
               pos = j; 
               tmp = a[j]; 
           }
        }
        a[pos] = a[i];
        a[i] = tmp; // меняем местами наименьший с a[i]
    }
    return *a;
}
int check_strong(int *arr1,int *arr2)
{
    int is_strong;
    *arr1=sort(arr1);
    *arr2=sort(arr2);
    int *arr3=new int [n];
    merge(arr1, arr1 + n, arr2, arr2 + n, arr3);
    delete arr1;delete arr2;
    for (int i=0;i<2*n;i++)
    {
        if (arr3[i+1]-arr3[i]>1)
        {is_strong=(arr3[i]+arr3[i+1])/2;break;}
        else is_strong=0;
    }
    return is_strong;
    
}
int main()
{
    ifstream infile("input.txt");
    setlocale(0,"Rus");
    int *a1=new int[n];
    int *state_a=new int [n];
    char *symbol_a=new char [n];
    int *state_b=new int [n];
    char *symbol_b=new char [n];
    int i;
    while (!infile.eof())
    {
        for (int i=0; i<n;i++)
        infile>>a1[i]>>state_a[i]>>symbol_a[i]>>state_b[i]>>symbol_b[i];
    }
    cout<<check_strong(state_a,state_b)<<endl;
    system("PAUSE");
}
Делал пошаговую проверку: все считает правильно, но при выводе выбивает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 23:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка кучи (C++):

Получать различные начала кучи при создании кучи внутри цикла - C++
Можно ли как-то такое провернуть, чтобы на каждой итерации цикла получались различные адреса (выбираются ОС) на начало кучи (периодические...

Ошибка кучи - C++
Здравствуйте, уважаемые программисты. Возникла у меня такая проблема: Задали сделать курсовую работу на С++ через MFC. Суть задачи: В...

Ошибка о повреждение кучи - C++
Вот переделал программу со строками, с использованием классов. Почему-то опять возникает ошибка о повреждение кучи. Не могу понять где...

Ошибка о выходе за границу памяти кучи - C++
Собственно изучаю месяца три, первый мой язык. Сначала был вебинар, сейчас читаю А. Пол. Пока интересно. Собственно вопросы. Есть...

Ошибка повреждения кучи при работе с динамическим стеком - C++
код выдает ошибку повреждения кучи class pixel1 { public: pixel1(int i, int j, int way, int gradient){ pixel1::i = i; ...

Ошибка при "сборе мусора" . Повреждение кучи - C++
Привет ребята! Я совсем скверно знаю плюсы и не смотря на несколько лет довольно успешной работы в ИТ так и не заставил себя заниматься...

28
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 14:17  [ТС] #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Ошибку при запуске или при компиляции? Разницу, надеюсь, понимаете?

Добавлено через 2 минуты
Если: Ctrl + Alt + F7, результат перекомпиляции какой?
Ошибка при запуске.

выдает "5", правильный ответ.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:20 #17
Цитата Сообщение от Triathlet23 Посмотреть сообщение
выдает "5"..правильный ответ.
У вас что, если нажать Ctrl + Alt + F7, программа запускается?
На вопрос когда-нибудь ответите?
Цитата Сообщение от alsav22 Посмотреть сообщение
результат перекомпиляции какой?
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 14:25  [ТС] #18
Цитата Сообщение от alsav22 Посмотреть сообщение
У вас что, если нажать Ctrl + Alt + F7, программа запускается?
На вопрос когда-нибудь ответите?
Я вас наверное не понял. Нажал "продолжить" и выдало ответ.

Когда нажимать Ctrl + Alt + F7?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:30 #19
Цитата Сообщение от Triathlet23 Посмотреть сообщение
Когда нажимать Ctrl + Alt + F7?
Просто нажать. Будет сделана перекомпиляция кода. Результат покажите.
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 14:33  [ТС] #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Просто нажать. Будет сделана перекомпиляция кода. Результат покажите.
Ничего не происходит.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:38 #21
Цитата Сообщение от Triathlet23 Посмотреть сообщение
Ничего не происходит.
Во вкладке окна студии Построение, щёлкните по Перестроить решение. Вы, вообще, компиляцию как запускаете?
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 14:42  [ТС] #22
Цитата Сообщение от alsav22 Посмотреть сообщение
Во вкладке окна студии Построение, щёлкните по Перестроить решение. Вы, вообще, компиляцию как запускаете?
Компиляцию запускаю нажимая F5.
Результат перекомпиляции:
d:\microsoft visual studio 10.0\vc\include\algorithm(3076): см. объявление "std::_Merge1"
1> d:\учеба\теория алгоритмов\лаб2\min_avtomat\min_avtomat\main.cpp(35): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::merge<int*,int*,int*>(_InIt1,_InIt1,_InIt2,_InIt2,_OutIt)"
1> with
1> [
1> _OutIt=int *,
1> _InIt1=int *,
1> _InIt2=int *
1> ]
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:53 #23
Цитата Сообщение от Triathlet23 Посмотреть сообщение
Результат перекомпиляции:
Это не результат!!! ВЕСЬ текст покажите!!!
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 14:55  [ТС] #24
Цитата Сообщение от alsav22 Посмотреть сообщение
Это не результат!!! ВЕСЬ текст покажите!!!
1>------ Перестроение всех файлов начато: проект: min_avtomat, Конфигурация: Debug Win32 ------
1> main.cpp
1>d:\учеба\теория алгоритмов\лаб2\min_avtomat\min_avtomat\main.cpp(55): warning C4101: i: неиспользованная локальная переменная
1>d:\microsoft visual studio 10.0\vc\include\algorithm(3098): warning C4996: 'std::_Merge1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1> d:\microsoft visual studio 10.0\vc\include\algorithm(3076): см. объявление "std::_Merge1"
1> d:\учеба\теория алгоритмов\лаб2\min_avtomat\min_avtomat\main.cpp(35): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::merge<int*,int*,int*>(_InIt1,_InIt1,_InIt2,_InIt2,_OutIt)"
1> with
1> [
1> _OutIt=int *,
1> _InIt1=int *,
1> _InIt2=int *
1> ]
1> min_avtomat.vcxproj -> D:\Учеба\Теория алгоритмов\Лаб2\min_avtomat\Debug\min_avtomat.exe
========== Перестроение всех: успешно: 1, с ошибками: 0, пропущено: 0 ==========
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:57 #25
Если теперь нажать F5?
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 15:04  [ТС] #26
Цитата Сообщение от alsav22 Посмотреть сообщение
Если теперь нажать F5?
Сначала 1. После того, как нажимаешь "Продолжить" - показывает 2.
0
Миниатюры
Ошибка кучи   Ошибка кучи  
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 15:14 #27
Вот это код, что выдаёт?
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
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
 
const int n=9;
 
int sort(int *a)
{
    for(int i = 0; i < n; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        int tmp = a[i];
        for(int j = i + 1; j < n; ++j) // цикл выбора наименьшего элемента
        {
            if (a[j] <= tmp) 
           {
               pos = j; 
               tmp = a[j]; 
           }
        }
        a[pos] = a[i];
        a[i] = tmp; // меняем местами наименьший с a[i]
    }
    return *a;
}
 
int check_strong(int *arr1,int *arr2)
{
    int is_strong;
    *arr1=sort(arr1);
    *arr2=sort(arr2);
    int *arr3=new int [n];
    merge(arr1, arr1 + n, arr2, arr2 + n, arr3);
    delete arr1;delete arr2;
    for (int i=0;i<2*n;i++)
    {
        if (arr3[i+1] - arr3[i]>1)
        {
            is_strong = (arr3[i]+arr3[i+1]) / 2;
            break;
        }
        else is_strong=0;
    }
    return is_strong;
    
}
 
int main()
{
    ifstream infile("input.txt");
    if (infile)
    {
        setlocale(0,"Rus");
        int *a1=new int[n];
        int *state_a=new int [n];
        char *symbol_a=new char [n];
        int *state_b=new int [n];
        char *symbol_b=new char [n];
        //int i;
        while (!infile.eof())
        {
            for (int i=0; i<n;i++)
            infile>>a1[i]>>state_a[i]>>symbol_a[i]>>state_b[i]>>symbol_b[i];
        }
        cout<<check_strong(state_a,state_b)<<endl;
    }
    else cout << "Error!" << endl;
 
    system("PAUSE");
}
0
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 15:20  [ТС] #28
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это код, что выдаёт?
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
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
 
const int n=9;
 
int sort(int *a)
{
    for(int i = 0; i < n; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        int tmp = a[i];
        for(int j = i + 1; j < n; ++j) // цикл выбора наименьшего элемента
        {
            if (a[j] <= tmp) 
           {
               pos = j; 
               tmp = a[j]; 
           }
        }
        a[pos] = a[i];
        a[i] = tmp; // меняем местами наименьший с a[i]
    }
    return *a;
}
 
int check_strong(int *arr1,int *arr2)
{
    int is_strong;
    *arr1=sort(arr1);
    *arr2=sort(arr2);
    int *arr3=new int [n];
    merge(arr1, arr1 + n, arr2, arr2 + n, arr3);
    delete arr1;delete arr2;
    for (int i=0;i<2*n;i++)
    {
        if (arr3[i+1] - arr3[i]>1)
        {
            is_strong = (arr3[i]+arr3[i+1]) / 2;
            break;
        }
        else is_strong=0;
    }
    return is_strong;
    
}
 
int main()
{
    ifstream infile("input.txt");
    if (infile)
    {
        setlocale(0,"Rus");
        int *a1=new int[n];
        int *state_a=new int [n];
        char *symbol_a=new char [n];
        int *state_b=new int [n];
        char *symbol_b=new char [n];
        //int i;
        while (!infile.eof())
        {
            for (int i=0; i<n;i++)
            infile>>a1[i]>>state_a[i]>>symbol_a[i]>>state_b[i]>>symbol_b[i];
        }
        cout<<check_strong(state_a,state_b)<<endl;
    }
    else cout << "Error!" << endl;
 
    system("PAUSE");
}
Те же ошибки. И при перекомпиляции все также.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 16:33 #29
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
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
 
const int n = 9;
 
void sort(int *a)
{
    for(int i = 0; i < n; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        int tmp = a[i];
        for(int j = i + 1; j < n; ++j) // цикл выбора наименьшего элемента
        {
            if (a[j] <= tmp) 
           {
               pos = j; 
               tmp = a[j]; 
           }
        }
        a[pos] = a[i];
        a[i] = tmp; // меняем местами наименьший с a[i]
    }
   
}
 
int check_strong(int *arr1,int *arr2)
{
    int is_strong;
    sort(arr1);
    sort(arr2);
    int *arr3=new int [n * 2];
    merge(arr1, arr1 + n, arr2, arr2 + n, arr3);
    delete [] arr1; delete [] arr2;
    for (int i=0;i<2*n;i++)
    {
        if (arr3[i+1] - arr3[i]>1)
        {
            is_strong = (arr3[i]+arr3[i+1]) / 2;
            break;
        }
        else is_strong=0;
    }
    delete [] arr3;
    return is_strong;
    
}
 
int main()
{
    ifstream infile("input.txt");
    if (infile)
    {
        setlocale(0,"Rus");
        int *a1=new int[n];
        int *state_a=new int [n];
        char *symbol_a=new char [n];
        int *state_b=new int [n];
        char *symbol_b=new char [n];
        int i = 0;
        while (i < n && (infile>>a1[i]>>state_a[i]>>symbol_a[i]>>state_b[i]>>symbol_b[i]))
        {
            ++i;
        }
        cout<<check_strong(state_a,state_b)<<endl;
    }
    else cout << "Error!" << endl;
 
    system("PAUSE");
    return 0;
}
Косяк, упомянутый в 7 посте, остался.
0
25.10.2013, 16:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 16:33
Привет! Вот еще темы с ответами:

Размер кучи - C++
С помощью какой библиотечной ф-ции или как узнать размер кучи в языке Си?

Повреждение кучи - C++
После выполнения программы выдаёт ошибку Debug Assertion Failed Помогите найти и исправить место из-за которого ошибка, я так понимаю она...

Повреждение кучи - C++
Есть код #include &lt;iostream&gt; using namespace std; struct STUDENT { char NAME; int GROUP; int SES; };

Повреждение кучи - C++
#ifndef _TASK2_H_ #define _TASK2_H_ #include &lt;iostream&gt; using namespace std; namespace TeamResult { static int...


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

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

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