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

Ваша программа вызвала нарушение доступа(ошибка сегментации) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 22:49     Ваша программа вызвала нарушение доступа(ошибка сегментации) #1
Уже видел тему с той же проблемой, но так и не смог интерпретировать то что написано там под решение моей проблемы
вот собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
#define G 20
#define V 40
int main(){
    int **pic;
    pic=new int *[G];
    for(int i=0;i<G;i++){
            pic[i]=new int [V];
    for(int g=0;g<G;g++)
            for(int j=0;j<V;j++)
                    pic[g][j]=g*j;
    cout<<pic[5][6]<<endl;
    for(int i=0;i<G;i++)
            delete []pic[i];
    delete []pic;
    }
    system("pause");
    return 0;
}
Вроде все правильно, но при запуске падает, в отладке: "Ваша программа вызвала нарушение доступа(ошибка сенментации)"
Где я вышел за пределы массива?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KostyaKulakov
Заблокирован
25.08.2012, 22:53     Ваша программа вызвала нарушение доступа(ошибка сегментации) #2
VS 2010 ошибки не видит
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
25.08.2012, 22:53     Ваша программа вызвала нарушение доступа(ошибка сегментации) #3
на первый взгляд вроде все в порядке
пройди пошагово и посмотри в какой строке падает
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 22:55  [ТС]     Ваша программа вызвала нарушение доступа(ошибка сегментации) #4
Падает на 12 строке во время второго прохода цикла на 10й строке
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
25.08.2012, 22:56     Ваша программа вызвала нарушение доступа(ошибка сегментации) #5
нашел

Цитата Сообщение от mersinvald Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<G;i++){
 pic[i]=new int [V];
 for(int g=0;g<G;g++)
 for(int j=0;j<V;j++)
 pic[g][j]=g*j;
 cout<<pic[5][6]<<endl;
 for(int i=0;i<G;i++)
 delete []pic[i];
 delete []pic;
 }
сколько раз вызовется delete []pic???
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 22:58  [ТС]     Ваша программа вызвала нарушение доступа(ошибка сегментации) #6
гмм.. 20?
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 22:59  [ТС]     Ваша программа вызвала нарушение доступа(ошибка сегментации) #7
ой, это delete []pic[i] 20 раз
а []pic 1 раз
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
25.08.2012, 23:01     Ваша программа вызвала нарушение доступа(ошибка сегментации) #8
Цитата Сообщение от mersinvald Посмотреть сообщение
гмм.. 20?
ага
а
Цитата Сообщение от mersinvald Посмотреть сообщение
C++
1
pic=new int *[G];
один раз

Добавлено через 1 минуту
Цитата Сообщение от mersinvald Посмотреть сообщение
ой, это delete []pic[i] 20 раз
а []pic 1 раз
в скобках разберись.....
KostyaKulakov
Заблокирован
25.08.2012, 23:03     Ваша программа вызвала нарушение доступа(ошибка сегментации) #9
Цитата Сообщение от ValeryS Посмотреть сообщение
ага
а

один раз

Добавлено через 1 минуту

в скобках разберись.....
до освобождения памяти не доходит даже. проблема в другом.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
25.08.2012, 23:03     Ваша программа вызвала нарушение доступа(ошибка сегментации) #10
Цитата Сообщение от mersinvald Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
pic[i]=new int [V];
 for(int g=0;g<G;g++)
 for(int j=0;j<V;j++)
 pic[g][j]=g*j;
 cout<<pic[5][6]<<endl;
 for(int i=0;i<G;i++)
 delete []pic[i];
 delete []pic;
это тело цикла

Цитата Сообщение от mersinvald Посмотреть сообщение
C++
1
for(int i=0;i<G;i++)
так сколько раз?
KostyaKulakov
Заблокирован
25.08.2012, 23:04     Ваша программа вызвала нарушение доступа(ошибка сегментации) #11
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
#include <iostream>
using namespace std;
#define G 20
#define V 40
int main()
{
    int** pic = new int*[G];
 
    for(int i=0;i<G;i++)
    {
        pic[i]=new int [V];
    }
 
    for(int i=0; i < G; i++)
            for(int k=0; k < V; k++)
                    pic[i][k] = i * k;
 
    cout << pic[5][6] << endl;
 
    for(int i=0;i<V;i++)
            delete[] pic[i];
 
    delete[] pic;
 
    return 0;
}
проблема была в том. что память выделялась 1 раз. а цикл прогонял 40 или 20. нужно было выделение вынести в отдельный цикл. плюс надо было очищать память не G а V. тк память именно под V выделялась.
только, что проверил. программа работает нормально. используйте мой код
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 23:04  [ТС]     Ваша программа вызвала нарушение доступа(ошибка сегментации) #12
Все равно не очень понимаю.. программа падает еще раньше, значит если в очистке памяти и есть ошибка, сейчас она роли не играет?
KostyaKulakov
Заблокирован
25.08.2012, 23:04     Ваша программа вызвала нарушение доступа(ошибка сегментации) #13
проблема была в том. что память выделялась 1 раз. а цикл прогонял 40 или 20. нужно было выделение вынести в отдельный цикл.
mersinvald
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
25.08.2012, 23:07  [ТС]     Ваша программа вызвала нарушение доступа(ошибка сегментации) #14
Спасибо, заработало!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2012, 23:08     Ваша программа вызвала нарушение доступа(ошибка сегментации)
Еще ссылки по теме:

C++ Ошибка: нарушение прав доступа по адресу
Ошибка: "Ваша программа вызвала нарушение доступа (ошибку сегментации)" C++
C++ Ошибка: нарушение прав доступа при чтении по адресу

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

Или воспользуйтесь поиском по форуму:
KostyaKulakov
Заблокирован
25.08.2012, 23:08     Ваша программа вызвала нарушение доступа(ошибка сегментации) #15
незачто
Yandex
Объявления
25.08.2012, 23:08     Ваша программа вызвала нарушение доступа(ошибка сегментации)
Ответ Создать тему
Опции темы

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