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

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

Войти
Регистрация
Восстановить пароль
 
MarLuckDen
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 2
#1

Не получается найти ошибки в программе(среда разработки - VS 2005) - C++

12.06.2014, 21:42. Просмотров 189. Ответов 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
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
106
107
108
109
110
111
112
113
114
115
#include "StdAfx.h"
#include "Massiv.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
void main()
{
 Massiv a,b;
 int number,punkt,rec,field,kol,n1,n2,n,n3,n4;
 
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 while (punkt!=7)
 {
 switch(punkt)
 {
 case 1: {    //sozdanie massiva
 a.Vvod_Sl();
 cout<<endl;
 a.Print();
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 }
 break;
 case 2: {a.Print(); //pechat massiva
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt; }
 break;
 case 3: { //pechat stroki po indeksu
 cout<<"Vvedite nomer massiva (numeracia s 0!): ";cin>>number;
 cout<<endl;
 a.Print_2(number);
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 }
 break;
 case 4: {  //sceplenie dvuh massivov
 cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n1;cout<<endl;
 cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n2;cout<<endl;
 a.Scepl(n1,n2);
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 case 5: {  //sliyanie dvuh massivov
 cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n3;cout<<endl;
 cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n4;cout<<endl;
 a.Sliyan(n3,n4);
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 
 case 6: {  //pechat konkretnogo elementa konkretnoi stroki
 cout<<"Vvedite nomer stroki massiva(numeraciya s 0!): ";cin>>rec;
 cout<<endl;
 cout<<"Vvedite nomer stolbca: ";cin>>field;
 cout<<endl;
 a.Print_3(rec,field);
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 case 7:
 break;
 }
 }
 }
Заголовочный файл класса Massiv.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <conio.h>
 
 
class Massiv
{
 int *a,*b,n,min;
 public:
 void Sozd();
 void Vvod_Sl();
 void Scepl(int n1, int n2);
 void Sliyan(int n3, int n4);
 void Print();
 void Print_2(int number);
 void Print_3(int rec, int field);
};
Massiv.cpp
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "StdAfx.h"
#include "Massiv.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
 
 
using namespace std;
 
void Massiv :: Sozd()
{
int m;
 cout<<"kolvo strok?";cin>>n;
 int min=0;
 for (int i=0;i<n;i++)
 {
 cout<<"kolvo elementov v "<< i+1 <<" stroke?";cin>>m;
 *(b+i)=m;
 if (min<m) {min=m;}
 }
a=(int*)malloc(sizeof(int)*n*min);
}
void Massiv::Vvod_Sl()
{
 Sozd();
 for (int i=0;i<n;i++)
 for (int j=0; j<*(b+i); j++)
 {
 *(a+i+j)=-20+rand()%40;
 }
}
void Massiv :: Print()
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
void Massiv :: Print_2(int number)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if (i==number) cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
 
void Massiv :: Print_3(int rec, int field)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if ((i==rec)&&(j==field)) cout<<"Danii element= "<<setw(6)<<*(a+i+j);
 else "Massiv s takimi dannimi ne naiden!";
 }
 cout<<endl;
 }
}
 
void Massiv :: Scepl(int n1,int n2)
{
 int m1,m2,k,j,l,p;
 int c[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n1);
 m2=*(b+n2);
 // *(b+n1)=m1+m2;
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 if(l<m1)
 {c[l]=*(a+n1+l);
 cout<<setw(6)<<c[l];
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n2+k);
 cout<<setw(6)<<c[l];
 k++;
 }
}
void Massiv :: Sliyan(int n3,int n4)
{
 int m1,m2,k,j,l,p,l1;
 int c[20],f[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n3);
 m2=*(b+n4);
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 {
 if(l<m1)
 {c[l]=*(a+n3+l);
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n4+k);
 k++;
 }
 }
 l1=0;
 f[l1]=c[l1];
 cout<<setw(6)<<f[l1];
 //sliyanie
 for(p=1;p<m3;p++)
 if(f[l1]!=c[p])
 { l++;
 f[l1]=c[p];
 cout<<setw(6)<<f[l1];
 }
}
Во время запуска программы компилятор ошибки не выдает, но при попытке создания массива в программе получаю в окне вывода отладки следующее:
Первый экземпляр исключения в "0x76bfc41f" в "console.exe": Исключение Microsoft C++: [rethrow] по адресу 0x00000000..
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
И это циклично повторяется раз двадцать, после чего вылетает эта же ошибка. Сам массив не выводится.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 21:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается найти ошибки в программе(среда разработки - VS 2005) (C++):

Среда разработки - C++
Подскажите нормальную IDE (C++),а то Dev-CPP как-то мистическим образом работает, и не такую громоздкую как VisualStudio

Среда разработки - C++
Всем доброго времени суток. Народ посоветуйте в какой среде следует начать программирование на С++. Сейчас очень много всяких сред...

Среда разработки - C++
Подскажите пожалуйста где можно скачать RAD Studio ?

Среда разработки - C++
Слышал что вкусы различаются, соответсвенно и среда у многих отличается друг от друга... Простите, в чем разница между такими средами как...

Среда разработки - - C++
Нужна консольная среда разработки. У нас в универе она помоему под С и мы файлу формат ещё меняем на СРР подскажите такую. Нужна позарез ...

Среда разработки - C++
Здраствуйте, подскажите где лучше писать С++, на какой программе?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Renji
1901 / 1299 / 291
Регистрация: 05.06.2014
Сообщений: 3,711
12.06.2014, 22:31 #2
это циклично повторяется раз двадцать, после чего вылетает эта же ошибка. Сам массив не выводится.
void Sozd(); использует b без инициализации. И вообще, заменить конструктором Massiv.
int *a,*b,n,min; - каждому полю структуры присвоить имя содержащее минимум одно слово описывающее смысл этого поля. По крайней мере, если вы собираетесь ходить по форумам спрашивая "а почему мой код не работает".
Больше assert для бога assert.
nmcf
5309 / 4629 / 1548
Регистрация: 14.04.2014
Сообщений: 18,437
12.06.2014, 22:31 #3
Почему нет конструктора класса? Для чего malloc(), если есть new?
Arukasa
3 / 3 / 1
Регистрация: 06.01.2013
Сообщений: 29
12.06.2014, 22:46 #4
C++
1
*(b+i) = m;
и что это такое? Оо"
C++
1
else "Massiv s takimi dannimi ne naiden!";
Старайтесь форматировать код

C++
1
2
3
4
5
6
Massiv::Massiv()
    : a(NULL)
    , b(NULL)
    , n(0)
    , min(0)
{};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2014, 22:46
Привет! Вот еще темы с ответами:

Среда разработки под ХР - C++
Хочу начать изучать с++,но у меня стоит винда ХР ,последние версии visual studio мне как я понял,не подойдут,что посоветуете для моей...

Среда разработки и литература - C++
Всем добрый день, на днях начал изучение великого и могучего С++ Начну с того, что скажу какие цели я преследую в изучении С++, я сам...

Среда разработки для Mac os X - C++
Всем привет! Я недавно перешел на Mac и я все еще не определился со средой. И по этому прошу вас поделится какой средой вы пользуетесь....

Среда разработки для новичка - C++
Всем привет. Я начал изучать C++ по книжке &quot;с++ за 21 день&quot;. К сожалению, в этой книге все рассматриваемые примеры консольные. Захотелось...


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

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

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