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

Исправление ошибок в программе - C++

Восстановить пароль Регистрация
 
Ultran
 Аватар для Ultran
3 / 3 / 0
Регистрация: 15.09.2012
Сообщений: 86
08.12.2012, 20:26     Исправление ошибок в программе #1
Здравствуйте!
Занимаюсь написанием программы. В ходе написания возник следующий вопрос. В ходе выполнения нижеприведенного кода выдается ошибка:
Необработанное исключение в "0x0f3957aa (msvcr100d.dll)" в "laba7.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2".
Причем программа выполняется нормально, все выводится, но компилятор выдает вышеприведенную ошибку. В чем ошибка?
Вот код программы:
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include "math.h"
#include <iomanip>
 
using namespace std;
 
 
int main() 
{
    setlocale(0,"rus");
 
    int str, stl;
    int **matr;
 
    // ---- Ввод количества строк и столбцов матрицы ---- //
    cout<<"Введите количество строк матрицы: ";
    cin>>str;
 
    cout<<"Введите количество столбцов матрицы: ";
    cin>>stl;
 
    // --------- Выделение динамической памяти --------- //
    matr = new int * [str]; 
    for (int i=0; i<str; i++)
    {
        matr[i] = new int [stl]; 
    }
 
    // ------------ Ввод элементов массива ------------ //
    for (int i=0; i<str; i++)
    {
        for (int j=0; j<stl; j++)
        {
            cout<<"Введите элемент ["<<i<<"]["<<j<<"] матрицы: ";
            cin>>matr[i][j];
        }
    }
 
    // ---------------- Выводим матрицу --------------- //
    cout<<"Выводим матрицу:"<<endl<<endl;
    for (int i=0; i<str; i++)
    {
        for (int j=0; j<stl; j++)
        {
            cout<<matr[i][j];
        }
    }
 
    // ------------- Освобождение памяти ------------- //
    for (int i=0; i<str; i++)
    {
        delete matr [i];
        delete [] matr;
    }
 
 
    system ("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 20:26     Исправление ошибок в программе
Посмотрите здесь:

C++ Исправление ошибок в программе
C++ Исправление ошибок в C++
C++ исправление ошибок
C++ Исправление ошибок в программе
C++ Исправление ошибок
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 20:30     Исправление ошибок в программе #2
Цитата Сообщение от Ultran Посмотреть сообщение
for (int i=0; i<str; i++) {
delete matr [i];
delete [] matr;
}
очевидно, что должно быть

C++
1
2
3
4
5
    for (int i=0; i<str; i++)
    {
        delete matr [i];
    }
    delete [] matr;
негоже многократно делать delete для одного и того же указателя, да еще и потом использовать этот удаленный указатель для доступа к массиву
Ultran
 Аватар для Ultran
3 / 3 / 0
Регистрация: 15.09.2012
Сообщений: 86
08.12.2012, 20:41  [ТС]     Исправление ошибок в программе #3
Цитата Сообщение от yekka Посмотреть сообщение
негоже многократно делать delete для одного и того же указателя, да еще и потом использовать этот удаленный указатель для доступа к массиву
А как будет правильно?
Немного не понял Вас. Поясните пожалуйста.

Добавлено через 6 минут
C++
1
2
3
4
for (int i=0; i<str; i++)
    {
        delete matr [i];
    }
Т.е. вот так будет правильно, верно?
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 20:43     Исправление ошибок в программе #4
я дюже код не читал, но судя по всему правильно будет
C++
1
2
3
4
5
    for (int i=0; i<str; i++)
    {
        delete [] matr [i];
    }
    delete [] matr;
Ultran
 Аватар для Ultran
3 / 3 / 0
Регистрация: 15.09.2012
Сообщений: 86
08.12.2012, 20:46  [ТС]     Исправление ошибок в программе #5
Цитата Сообщение от yekka Посмотреть сообщение
я дюже код не читал, но судя по всему правильно будет
C++
1
2
3
4
5
    for (int i=0; i<str; i++)
    {
        delete [] matr [i];
    }
    delete [] matr;
Все, я понял свою ошибку!
Спасибо Вам большое, не досмотрел просто.
Yandex
Объявления
08.12.2012, 20:46     Исправление ошибок в программе
Ответ Создать тему
Опции темы

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