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

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

Войти
Регистрация
Восстановить пароль
 
Alise.
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
#1

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

07.02.2014, 00:15. Просмотров 296. Ответов 5
Метки нет (Все метки)

Вопрос: из-за чего программа может рушится?
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.
Из-за чего это может быть?))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при выделении памяти (C++):

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

Ошибка при выделении памяти - C++
Когда убираю free(buf), то ошибки нету, а когда есть, то вылазит ошибка. Почему такое происходит? #include <stdlib.h> #include...

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти - C++
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

Ошибка при выделении памяти с помощью malloc - C++
Помогите выдает ошибку в рядочке :"Ar = ( far *)malloc(size*sizeof(int));" полный текст програмы: #include "stdafx.h" using namespace...

Ошибка при выделении памяти под двумерный массив - C++
#include <iostream> using namespace std; class array { int size1, size2; char **matr; public: array(int n1, int n2); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
07.02.2014, 00:17 #2
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.
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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 17:34
Привет! Вот еще темы с ответами:

Ошибка при выделении памяти динамически для структуры - C++
Есть программа. Вылетает ошибка. Если gets(BLOCKNOTE.NAME) заменить на cin&gt;&gt;BLOCKNOTE.NAME все работает нормально. Хотелось бы ипользовать...

Ошибка при выделении памяти под вектор методом resize - C++
Всем добрый день! Возник следующий вопрос: выделяю память для вектора с помощью метода resize(w*h). Затем мне нужно на место с определенным...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб? - C++
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

Ошибка в выделении памяти - C++
проблема с выделением памяти. ошибку никак найти не могу, поможет кто исправить? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.02.2014, 17:34
Ответ Создать тему
Опции темы

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