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

Unhandled exception... - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
attentions
2 / 2 / 0
Регистрация: 14.11.2010
Сообщений: 26
16.11.2010, 01:43     Unhandled exception... #1
Делал лабораторную работу....и вот уже битых часа 3 сиже немогу понять в чем проблема и как ее испрвить

вот условие задачи

2. Даны действительная матрица размера n x (n+1), действительные числа a1, ..., an+1, b1, ..., bn+1, натуральные числа p, q, (p n, q n+1). Образовать новую матрицу размера (n+1) x (n+2) вставкой после стро-ки с номером p данной матрицы новой строки с элементами a1, ..., an+1 и последующей вставкой после столбца с номером q нового столбца с элементами b1, ..., bn+1

Разработать алгоритм решения задачи обработки двумерного массива, хранящегося в динамической области памяти. Реализовать алгоритм на языке С++ с помощью функций с параметрами: 1) функция выделения памяти для размещения массива, возвращающая указатель на указатель на массив; 2) функция ввода массива (в качестве параметров выступают указатель на указатель на массив и его размерность); 3) функция вывода массива (в качестве параметров выступают указатель на указатель на массив и его размерность); 4) функция (функции) расчета (может быть с типом, т.е. возвращает значение результата или void-функция); 5) 1) функция освобождения памяти



вот код программы

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <stdlib.h>
using namespace std;
 
double **takeMatrix(int k,int n, bool outAdress = true){
    double **matrix = new double *[k];
    if (matrix == NULL) exit(1);
    if(outAdress) cout << "Адрес матрицы: " << matrix << endl;
 
    for (int i = 0; i < k; i++){
        matrix[i] = new double [n];
        if (matrix[i] == NULL) exit(1);
        if(outAdress) cout << "Адрес строки №" << i+1 << ": " << matrix[i] << endl;
    }
    return matrix;
}
 
double *takeMassiv (int k)
{double *massiv = new double [k+2];
return massiv;
}
 
void deleteMatrix (int k, double **matrix){
    for (int i = 0; i < k; i++) delete matrix[i];
    delete [] matrix;
}
 
void Delete_mas(double *massiv)
{delete[]massiv; massiv=NULL;}
 
void inputMatrix(int k,int n, double **matrix){
    cout << "Введите элементы матрицы:" << endl;
    for (int i = 0; i < k; i++){
        for (int j = 0; j < n; j++){
            cout << " a(" << i+1 << "," << j+1 << ") = ";
            cin >> matrix[i][j];
        }
    }
}
 
void outputMatrix(int k,int n, double **matrix){
    cout << "Ваша матрица:" << endl;
    for (int i = 0; i < k; i++){
        for (int j = 0; j < n; j++){
            cout << " " << matrix[i][j] << " ";
        }
        cout << endl;
    }
}
 
void matrixProcessing(int k,int n, double **matrix,int p,int q, double *massiv1, double *massiv2)
{
    double **newMatrix = takeMatrix(int (k+1),int (n+2), false);
    int i,j;
 
    for(i=0; i<k;i++) {
    for(j=0;j<k;j++){newMatrix[i][j]=matrix[i][j];};};
 
[COLOR="Red"]for(i=0; i<k+1;i++) {
    for(j=0;j<k+1;j++){newMatrix[i][q+j]=matrix[i][q];};};
 
for(i=0; i<k+1;i++) {
    for(j=0;j<k+2;j++){newMatrix[p+i][j]=matrix[p][i];};};[/COLOR]
 
for(j=0; j<k+2;j++) {newMatrix[p][j]=massiv1[j];};
for(i=0; i<k+1;i++) {newMatrix[i][q]=massiv2[i];};
 
    cout << "Матрица обработана!" << endl;
}
 
void main(){
    setlocale(LC_ALL,"Russian");
 
 
int k,n,p,q;
cout<<"Число строк матрицы = ";
cin>>k;
cout<<"Число столбцов матрицы = ";
cin>>n;
    
    //Выделение памяти
    double **uMatrix = takeMatrix(k,n);
    double *masiv1 = takeMassiv(k);
    double *masiv2 = takeMassiv(k);;
    
    //Ввода матрицы
    inputMatrix(k,n,uMatrix);
 
    //Вывод матрицы
    outputMatrix(k,n,uMatrix);
 
cout<<"Число p = ";
cin>>p;
cout<<"Число q = ";
cin>>q;
 
    //Обработка матрицы
    matrixProcessing(k,n,uMatrix,p,q,masiv1,masiv2);
 
    //Вывод матрицы
    outputMatrix(k,n,uMatrix);
 
    //Освобождение памяти
    deleteMatrix(k,uMatrix);
}
Выдает Unhandled exception at 0x00411c85 in lab_22.exe: 0xC0000005: Access violation reading location 0xfdfdfe05.

прошу помочь очень надо..((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.11.2010, 01:55     Unhandled exception... #2
takeMatrix возвращает ссылку на локальную переменную.

Добавлено через 46 секунд
То же самое касается некоторых друних функций.
attentions
2 / 2 / 0
Регистрация: 14.11.2010
Сообщений: 26
16.11.2010, 01:57  [ТС]     Unhandled exception... #3
а можна поподробней??
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.11.2010, 02:03     Unhandled exception... #4
В функции создаётся локальная переменная, а точнее указатель, который возвращается при выходе из программы. Но при выходе этот указатель теряется.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 02:11     Unhandled exception... #5
C++
1
2
    for(i=0; i<k+1; i++) {
        for(j=0; j<k+1; j++){newMatrix[i][q+j]=matrix[i][q];};};
матрица создана для k, n
а там matrixt[i][q], где i может быть равно k, matrix[k - 1] - последняя строка матрицы
получается обращение к matrix[k], которого нет

Добавлено через 1 минуту
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
takeMatrix возвращает ссылку на локальную переменную.

Добавлено через 46 секунд
То же самое касается некоторых друних функций.
takeMatrix возвращает содержимое указателя (то есть адрес)
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.11.2010, 02:14     Unhandled exception... #6
Цитата Сообщение от accept Посмотреть сообщение
takeMatrix возвращает содержимое указателя (то есть адрес)
Согласен. Неправильно написал, но смысл тот же.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 02:15     Unhandled exception... #7
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Согласен. Неправильно написал, но смысл тот же.
какой тот же, всё у него правильно
адрес не уничтожается после работы функции
attentions
2 / 2 / 0
Регистрация: 14.11.2010
Сообщений: 26
16.11.2010, 02:24  [ТС]     Unhandled exception... #8
пока не понял что написано, но факт в том что без указателей и вообще без функций, программа, написана через такой способ, работает на все 102%
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.11.2010, 02:25     Unhandled exception... #9
Опять согласен. Что-то напутал.
attentions
2 / 2 / 0
Регистрация: 14.11.2010
Сообщений: 26
16.11.2010, 02:44  [ТС]     Unhandled exception... #10
Цитата Сообщение от accept Посмотреть сообщение
C++
1
2
    for(i=0; i<k+1; i++) {
        for(j=0; j<k+1; j++){newMatrix[i][q+j]=matrix[i][q];};};
матрица создана для k, n
а там matrixt[i][q], где i может быть равно k, matrix[k - 1] - последняя строка матрицы
получается обращение к matrix[k], которого нет

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


takeMatrix возвращает содержимое указателя (то есть адрес)

значить вместо i писать i+1??

Добавлено через 11 минут
((не подходит.....((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2010, 03:30     Unhandled exception...
Еще ссылки по теме:

Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000. C++
ошибка-an unhandled win32 exception occured C++
Ошибка при написании класса: Unhandled exception std::bad_alloc at memory location C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 03:30     Unhandled exception... #11
ты передаёшь в функцию p и q, не сравнивая их с n и k
а потом через эти p и q обращаешься к строкам и столбцам, которые выделялись в зависимости от n и k

Добавлено через 2 минуты
Цитата Сообщение от attentions
значить вместо i писать i+1??
это было бы слишком просто
там нужно переделывать цикл
Yandex
Объявления
16.11.2010, 03:30     Unhandled exception...
Ответ Создать тему
Опции темы

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