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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
24.10.2013, 23:20     Ошибка кучи #1
Выдает ошибку: "ОС 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");
}
Делал пошаговую проверку: все считает правильно, но при выводе выбивает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 23:20     Ошибка кучи
Посмотрите здесь:

Границы кучи C++
C++ Ошибка о повреждение кучи
C++ Повреждение кучи
Повреждение кучи C++
Ошибка при "сборе мусора" . Повреждение кучи C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:38     Ошибка кучи #21
Цитата Сообщение от Triathlet23 Посмотреть сообщение
Ничего не происходит.
Во вкладке окна студии Построение, щёлкните по Перестроить решение. Вы, вообще, компиляцию как запускаете?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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> ]
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:53     Ошибка кучи #23
Цитата Сообщение от Triathlet23 Посмотреть сообщение
Результат перекомпиляции:
Это не результат!!! ВЕСЬ текст покажите!!!
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 ==========
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 14:57     Ошибка кучи #25
Если теперь нажать F5?
Triathlet23
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 31
25.10.2013, 15:04  [ТС]     Ошибка кучи #26
Цитата Сообщение от alsav22 Посмотреть сообщение
Если теперь нажать F5?
Сначала 1. После того, как нажимаешь "Продолжить" - показывает 2.
Миниатюры
Ошибка кучи   Ошибка кучи  
alsav22
5282 / 4801 / 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");
}
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");
}
Те же ошибки. И при перекомпиляции все также.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 16:33     Ошибка кучи
Еще ссылки по теме:

Повреждение кучи C++
C++ Получать различные начала кучи при создании кучи внутри цикла
C++ Ошибка о выходе за границу памяти кучи

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 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 посте, остался.
Yandex
Объявления
25.10.2013, 16:33     Ошибка кучи
Ответ Создать тему
Опции темы

Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru