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

Ошибка при выделении памяти - C++

Восстановить пароль Регистрация
 
Alise.
 Аватар для Alise.
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
07.02.2014, 00:15     Ошибка при выделении памяти #1
Вопрос: из-за чего программа может рушится?
C++
1
2
3
4
5
6
7
int *NRRow = new int [N+1];
    int *NRow = new int [N+1];
    int *NCol = new int [NZ];
         //тут код. всякие преобразования массивов и тд
           delete [] NCol;
delete [] NRRow;
delete [] NRow;
на делитах программа рушится. Закоменчиваю код - работает.
N где-то порядка 50, NZ где-то от 300.
Из-за чего это может быть?))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
07.02.2014, 00:17     Ошибка при выделении памяти #2
Alise., весь код в студию, пожалуйста!
Alise.
 Аватар для Alise.
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
07.02.2014, 00:20  [ТС]     Ошибка при выделении памяти #3
вот код)
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
void Graph::from_matrix_to_graph(){
 
    int *NRRow = new int [N+1];
    int *NRow = new int [N+1];
    int *NCol = new int [NZ];
 
    for (int i=0; i<N+1; i++)
    {NRow[i]=0;NRRow[i]=0;}
 
 
    for (int j=0; j<NZ*2-N; j++)
        NCol[j]=-1;
    
    for (int i=0; i<(N+1); i++){
        for (int j=Row[i]+1; j<Row[i+1]; j++){
            NRRow[Col[j]]++;
                }
    }
    
        
    for (int i=1; i<N+1; i++)
        NRRow[i]=NRRow[i-1]+NRRow[i];
    
    for (int i=1; i<N+1; i++)
    {NRow[i]=Row[i]+NRRow[i-1]-i;}
 
    
    
for (int i=0; i<N+1; i++){
    for (int j=Row[i]+1; j<Row[i+1]; j++){
        int k=0;
        int a=0;
        while (k!=-1) { 
            k=NCol[NRow[i]+a];
            a++;
        }
        NCol[NRow[i]+a-1]=Col[j];
        k=0;
        a=0;
        while (k!=-1) { 
            k=NCol[NRow[Col[j]]+a];
            a++;
        }
        NCol[NRow[Col[j]]+a-1]=i;
        k=0;
        a=0;
    }
}
 
for (int i=0; i<NZ*2-2*N; i++)
    Col[i]=NCol[i];
 
    
for (int j=0; j<(N+1); j++)
    Row[j]=NRow[j];
 
delete [] NCol;
 
delete [] NRRow; 
delete [] NRow;
 
 
}
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
07.02.2014, 00:28     Ошибка при выделении памяти #4
Alise., спасибо за урывок кода из класса, я его даже подебажить не могу. :/
Alise.
 Аватар для Alise.
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
07.02.2014, 01:00  [ТС]     Ошибка при выделении памяти #5
вот. Это уже можно продебажить, и ошибка все там же.)
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
 
#include<iostream>
 
void from_matrix_to_graph(int N,int NZ,int *Row, int *Col){
 
    int *NRRow = new int [N+1];
    int *NRow = new int [N+1];
    int *NCol = new int [NZ];
        for (int i=0; i<N+1; i++)
    {NRow[i]=0;NRRow[i]=0;}
 
 
    for (int j=0; j<NZ*2-N; j++)
        NCol[j]=-1;
    
    for (int i=0; i<(N+1); i++){
        for (int j=Row[i]+1; j<Row[i+1]; j++){
            NRRow[Col[j]]++;
                }
    }
    
        
    for (int i=1; i<N+1; i++)
        NRRow[i]=NRRow[i-1]+NRRow[i];
    
    for (int i=1; i<N+1; i++)
    {NRow[i]=Row[i]+NRRow[i-1]-i;}
 
for (int i=0; i<N+1; i++){
    for (int j=Row[i]+1; j<Row[i+1]; j++){
        int k=0;
        int a=0;
        while (k!=-1) { 
            k=NCol[NRow[i]+a];
            a++;
        }
        NCol[NRow[i]+a-1]=Col[j];
        k=0;
        a=0;
        while (k!=-1) { 
            k=NCol[NRow[Col[j]]+a];
            a++;
        }
        NCol[NRow[Col[j]]+a-1]=i;
        k=0;
        a=0;
    }
}
 
for (int i=0; i<NZ*2-2*N; i++)
    Col[i]=NCol[i];
 
    
for (int j=0; j<(N+1); j++)
    Row[j]=NRow[j];
 
delete [] NCol;
 
delete [] NRRow; 
delete [] NRow;
 
 
 
 
}
 
int main(){
 
 
    int a[6]={0,3,6,8,9,10};
    int b[10]={0,1,4,1,3,4,2,3,3,4};
 
    from_matrix_to_graph(5,10,a,b);
 
 
 
 
 
    return 0;
}
Добавлено через 25 минут
Ошибку нашла=) оказывается, ещё при иницализации массива единицами вышла за границы.
C++
1
2
for (int j=0; j<NZ*2-N; j++)
        NCol[j]=-1;
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
07.02.2014, 17:34     Ошибка при выделении памяти #6
Так Вы выделяете NCol[NZ]=NCol[10]. А цикл повторяете j<NZ*2-N, т.е. j<10*2-5 ( j<15) вот и вылет.... может так?
C++
1
2
 for (int j=0; j<NZ*2-2*N; j++)
        NCol[j]=-1;
Yandex
Объявления
07.02.2014, 17:34     Ошибка при выделении памяти
Ответ Создать тему
Опции темы

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