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

Работа с динамического массивом - ошибка при попытке ввода - C++

Восстановить пароль Регистрация
 
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,439
18.06.2014, 22:44     Работа с динамического массивом - ошибка при попытке ввода #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
#include <vcl.h>
#include <iostream.h>
#include <string.h>
#pragma hdrstop
#pragma argsused
using namespace std;
class ECM
{
char* type;
float Ghz;
int Memory;
float Gb;
public:
ECM(); //ГЄГ®Г*ñòðóêòîð ГЎГҐГ§ ГЇГ*Г°Г*ìåòðîâ
ECM(char* TYPE,float GHZ,int MEMORY,float GB);//ГЄГ®Г*ñòðóêòîð Г± ГЇГ*Г°Г*ìåòðГ*ìè
ECM(const ECM&); //ГЄГ®Г*ñòðóêòîð êîïèðîâГ*Г*ГЁГї
~ECM();          //äåñòðóêòîð
void settype(char* temp);
void setghz(float temp);
void setmemory(int temp);
void setgb(float temp);
char* gettypecpu();
float getghz();
int getmemory();
float getgb();
};
//------------------------------------------------------------------------------
void ECM::settype(char* temp)   //ГіГ±ГІГ*Г*îâèòü ГІГЁГЇ ïðîöåññîðГ*
{
type=temp;
}
//------------------------------------------------------------------------------
void ECM::setghz(float temp)    //ГіГ±ГІГ*Г*îâèòü Г·Г*ñòîòó ïðîöåññîðГ*
{
Ghz=temp;
}
//------------------------------------------------------------------------------
void ECM::setmemory(int temp)   //ГіГ±ГІГ*Г*îâèòü îáúåì ГЇГ*ìÿòè
{
Memory=temp;
}
//------------------------------------------------------------------------------
void ECM::setgb(float temp)     //ГіГ±ГІГ*Г*îâèòü îáúåì Г*Г*êîïèòåëÿ
{
Gb=temp;
}
//------------------------------------------------------------------------------
ECM::~ECM()                     //óäëèòü îáúåêò
{
cout<<"ГЋГЎГєГҐГЄГІ ГіГ¤Г*ëåГ*";
}
//------------------------------------------------------------------------------
ECM::ECM(char* TYPE,float GHZ,int MEMORY,float GB) //ГЄГ®Г*ñòðóêòîð Г± ГЇГ*Г°Г*ìåòðГ*ìè
{
type=TYPE;
Ghz=GHZ;
Memory=MEMORY;
Gb=GB;
}
//------------------------------------------------------------------------------
ECM::ECM(){ //ГЄГ®Г*ñòðóêòîð ГЎГҐГ§ ГЇГ*Г°Г*ìåòðîâ
type=NULL;
Ghz=0;
Memory=0;
Gb=0;}
//------------------------------------------------------------------------------
ECM::ECM(const ECM &E)   //ГЄГ®Г*ñòðóêòîð êîïèðîâГ*Г*ГЁГї
{
if (E.type) {type= new char [strlen(E.type)+1]; strcpy(type, E.type);}
else type=0;
type=E.type;Ghz=E.Ghz;Memory=E.Memory;Gb=E.Gb;
}                       
//------------------------------------------------------------------------------
char* ECM::gettypecpu() {return type;}
float ECM::getghz() {return Ghz;}
int ECM::getmemory() {return Memory;}
float ECM::getgb() {return Gb;}
void main()
{
char* ctemporary;
int itemporary;
float ftemporary;
int i,n=4;
ECM *pECM[4];
for (i=0;i<n;i++)
{
cout<<"CPU "; cin>>ctemporary; pECM[i]->settype(ctemporary);
cout<<"Ghz"; cin>>ftemporary;//pECM->setghz(ftemporary);
cout<<"RAM"; cin>>itemporary;//pECM->setmemory(itemporary);
cout<<"HDD"; cin>>ftemporary;//pECM->setgb(ftemporary);
};
for (i=0;i<n;i++)
cout<<"CPU= "<<pECM[i]->gettypecpu();
system("pause"); 
}
Миниатюры
Работа с динамического массивом - ошибка при попытке ввода  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 22:44     Работа с динамического массивом - ошибка при попытке ввода
Посмотрите здесь:

C++ Ошибка при создании динамического массива.
Ошибка при удалении динамического массива C++
C++ Ошибка при попытке подключить внешнюю библиотеку
C++ Ошибка при попытке удаления указателя
C++ Ошибка при выводе динамического массива
Ошибка при попытке создания шаблона C++
Ошибка очистки памяти после ввода динамического массива char C++
Ошибка при заполнении динамического массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,439
18.06.2014, 23:25  [ТС]     Работа с динамического массивом - ошибка при попытке ввода #2
Ошибка найдена. Строка 80 тип string, надо ее преобразовать в char*, кто знает путь преобразования попроще?
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
19.06.2014, 05:49     Работа с динамического массивом - ошибка при попытке ввода #3
C++
1
2
char* ctemporary
cout<<"CPU "; cin>>ctemporary;
ctemporary - указатель, который ничем не инициализирован.
Замени на std::string

C++
1
2
std::string ctemporary
cout<<"CPU "; cin>>ctemporary;
Вот тут объявлен массив из 4 указателей:

C++
1
2
3
4
ECM *pECM[4];
for (i=0;i<n;i++)
{
.... pECM[i]->settype(ctemporary);
Память под объекты не выделена, это обращение по не инициализированному указателю.


Вот тут

C++
1
2
3
4
void ECM::settype(char* temp)   //установить тип процессора
{
type=temp;
}
Указателю в классе присваивается адрес временной переменной.

Для начала все переменные char* замени на std::string
Yandex
Объявления
19.06.2014, 05:49     Работа с динамического массивом - ошибка при попытке ввода
Ответ Создать тему
Опции темы

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