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

Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы - C++

Восстановить пароль Регистрация
 
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 11:40     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #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
// dz325.11.13.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include<iostream>
using namespace std;
 
int main()
{
    cout<<"Vvedite razmer pervoi matrici:\n";
    int m, n;
    cin>>m>>n;
    cout<<"\nVvedite razmer vtoroi matrici:\n";
    int p, q;
    cin>>p>>q;
 
    if(n==p)
    {
        int **a=new int*[n];    //sozdaem 1 massiv;
        for(int i=0; i<n; i++)
            a[i]=new int[m];
 
        cout<<"\nZapolnite massiv A:\n";
        for(int i=0; i<m; i++)
            for(int j=0; j<n; j++)
                cin>>a[i][j];
 
        int **b=new int*[q];    //sozdaem 2 massiv;
        for(int i=0; i<q; i++)
            b[i]=new int[p];
 
        cout<<"\nZapolnite massiv B:\n";
        for(int i=0; i<p; i++)
            for(int j=0; j<q; j++)
                cin>>b[i][j];
 
        int **c=new int*[n];    //sozdaem 3 massiv;
        for(int i=0; i<n; i++)
            c[i]=new int[p];
 
        for(int i=0; i<p; i++)
            for(int j=0; j<n; j++)
            {
                c[i][j]=0;
                for(int k=0; k<n; k++)
                    c[i][j]+=a[i][j]*b[j][i];
            }
            
        for(int i=0; i<p; i++)
        {
            for(int j=0; j<n; j++)
                cout<<c[i][j]<<"\t";
            cout<<'\n';
        }
        delete []a;
        delete []b;
        delete []c;
    } 
    else cout<<"\nERROR";
    cin.get();
    cin.get();
}
И вылетает такое сообщение: Unhandled exception at 0x5d542258 (msvcp100d.dll) in dz325.11.13.exe: 0xC0000005: Access violation writing location 0xfdfdfdfd.
Вылетает сразу после заполнения массива В.
И показывает такой код:
Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы

Скажите, пожалуйста, где ошибка и как с ней бороться?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 11:56     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #2
По-моему, у вас строки со столбцами перепутаны.
Вот здесь, что с чем сравнивается?
C++
1
if(n==p)
Добавлено через 5 минут
Тут n - строки:
C++
1
2
3
int **a=new int*[n];    //sozdaem 1 massiv;
        for(int i=0; i<n; i++)
            a[i]=new int[m];
Тут n - уже столбцы:
C++
1
2
3
4
cout<<"\nZapolnite massiv A:\n";
        for(int i=0; i<m; i++)
            for(int j=0; j<n; j++)
                cin>>a[i][j];
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 11:58  [ТС]     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #3
n - это количество столбцов в матрице А, p - количество строк в матрице В. Ведь по правилу умножения матриц количество столбцов первой матрицы должно совпадать с количеством строк второй. Или нет?

Добавлено через 44 секунды
Ох, да, спасибо! Вы правы.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
29.11.2013, 12:04     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #4
Если
Цитата Сообщение от undergraduate Посмотреть сообщение
int **a=new int*[n]; //sozdaem 1 massiv; for(int i=0; i<n; i++) a[i]=new int[m];
то n - количество строк у матрицы a, а не столбцов.
Аналогичная ошибка для матрицы b.
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 12:06  [ТС]     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #5
Подождите, не понимаю.
Вот здесь:
C++
1
2
3
int **a=new int*[n];    //sozdaem 1 massiv;
        for(int i=0; i<n; i++)
            a[i]=new int[m];
мы в первой строчке создаем одномерный массив a[n], массив располагается в одну строку. А через цикл под каждым элементом этого массива мы создаем столбцы. Верно?
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
29.11.2013, 12:08     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #6
Неверно.
Сначала мы создаем массив указателей на строки.
Его размер соответственно равен количеству строк.
А потом для каждой строки выделяем память равную длине строки (т.е. количеству столбцов).
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 12:29  [ТС]     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #7
Переписано:
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
// dz325.11.13.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include<iostream>
using namespace std;
 
int main()
{
    cout<<"Vvedite razmer pervoi matrici:\n";
    int m, n;
    cin>>m>>n;
    cout<<"\nVvedite razmer vtoroi matrici:\n";
    int p, q;
    cin>>p>>q;
 
    if(n==p)
    {
        int **a=new int*[m];    //sozdaem 1 massiv;
        for(int i=0; i<n; i++)
            a[i]=new int[n];
 
        cout<<"\nZapolnite massiv A:\n";
        for(int i=0; i<m; i++)
            for(int j=0; j<n; j++)
                cin>>a[i][j];
 
        int **b=new int*[p];    //sozdaem 2 massiv;
        for(int i=0; i<q; i++)
            b[i]=new int[q];
 
        cout<<"\nZapolnite massiv B:\n";
        for(int i=0; i<p; i++)
            for(int j=0; j<q; j++)
                cin>>b[i][j];
 
        int **c=new int*[p];    //sozdaem 3 massiv;
        for(int i=0; i<n; i++)
            c[i]=new int[n];
 
        for(int i=0; i<p; i++)
            for(int j=0; j<n; j++)
            {
                c[i][j]=0;
                for(int k=0; k<n; k++)
                    c[i][j]+=a[i][j]*b[j][i];
            }
            
        for(int i=0; i<p; i++)
        {
            for(int j=0; j<n; j++)
                cout<<c[i][j]<<"\t";
            cout<<'\n';
        }
        delete []a;
        delete []b;
        delete []c;
    } 
    else cout<<"\nERROR";
    cin.get();
    cin.get();
}
Ошибка:
Unhandled exception at 0x558e2258 (msvcp100d.dll) in dz325.11.13.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
29.11.2013, 12:45     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #8
Массив С должен быть p*n
а у Вас p*q
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 12:50  [ТС]     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #9
Цитата Сообщение от zss Посмотреть сообщение
а у Вас p*q
В каких строках?
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
29.11.2013, 12:54     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #10
Там, где его создаете, надо
C++
1
2
3
  int **c=new int*[p];    //sozdaem 3 massiv;
        for(int i=0; i<p; i++)
            c[i]=new int[n];
Кстати, в остальных массивах та же ошибка
C++
1
2
3
 int **a=new int*[m];    //sozdaem 1 massiv;
        for(int i=0; i<m; i++)
            a[i]=new int[n];
Для второго сами исправьте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 13:25     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы
Еще ссылки по теме:

C++ Visual Studio 2012 Ошибка при компиляции программы
Ошибка при компиляции - Microsoft Visual C++ 2010, экспресс-выпуск C++
C++ MS Visual Studio 2013 Express при компиляции программа открывается и сразу закрывается

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

Или воспользуйтесь поиском по форуму:
undergraduate
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 19
29.11.2013, 13:25  [ТС]     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы #11
Вот, пошло дело.
Возник еще один вопрос. Ввожу размер первой матрицы 4х3, второй - 3х2. Заполняю массивы цифрами от 0 до 9, в последней строке появляются числа -707406399 и -303174171 (остальные элементы равны 3, 6, 0, 84,75). Но перед вычислением каждого элемента с[i][j] он обнулялся, то есть, никаких огромных и тем более отрицательных чисел быть не должно. В чем может быть проблема?
Yandex
Объявления
29.11.2013, 13:25     Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы
Ответ Создать тему
Опции темы

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