Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 06:37   #1
joersun
 
Регистрация: 02.04.2012
Сообщений: 6
По умолчанию Создание своего класса (borland C++)

Создал свой класс, запустил. но выдает ошибку "project classes.exe raised exception class EAccessViolation with messgae 'Access violation at address 326025AF. Write of address 00000008'. Process stopped. Use Step or Run to continue.
и указывает в деструкторе на строку
PHP код:
      delete size
;
вот само тело:
PHP код:
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int HexToDec(char c)
{
   switch(
c)
   {
      case 
'0' : return 0;
      case 
'1' : return 1;
      case 
'2' : return 2;
      case 
'3' : return 3;
      case 
'4' : return 4;
      case 
'5' : return 5;
      case 
'6' : return 6;
      case 
'7' : return 7;
      case 
'8' : return 8;
      case 
'9' : return 9;
      case 
'A' : return 10;
      case 
'B' : return 11;
      case 
'C' : return 12;
      case 
'D' : return 13;
      case 
'E' : return 14;
      case 
'F' : return 15;
      default : return -
1;
   }
}


class 
Hex
{
   public:
      
int *size;
      
char *buf;

   
Hex(){
      
size = new int;
      *
size 0;
      
buf = new char[*size];
   }

   ~
Hex(){
      
delete size;
      
delete buf;
   }

   
Hex(string_str){
      
size = new int;
      *
size _str.length();
      
buf _str.begin();
   }
   
Hex(char_str){
      
size = new int;
      *
size strlen(_str);
      
buf _str;
   }

   
Hex(const Hexobj){
      *
size = *obj.size;
      
buf = new char[*size];
      for (
int i 0< *sizei++)
         
buf obj.buf;
   }

   
unsigned long int Value(){
     
unsigned long int s =0;
      
int d 1;
      for (
int i 0< *sizei++)
         if (
HexToDec(buf[i]) != -1)
         {
            
s+= HexToDec(buf[i])*d;
            
d*= 16;
         }
      return 
s;
   }

   
bool operator> (Hex obj){
      if (*
size > *obj.size)
         return 
true;
      if (*
size < *obj.size)
         return 
false;
      if (
Value() > obj.Value())
         return 
true;
      else
         return 
false;
   }
};

int main()
{
   
string A,B;
   
"1A3B";
   
"2A3B";
   
Hex a(A),b(B);
   
cout << "a value = " << a.Value() << endl;
   
cout << "b value = " << b.Value() << endl;
   if (
a.operator >(b))
      
cout << "returned true";

   
getch();

подскажите, где ошибка?
joersun вне форума Ответить с цитированием
Старый 06.04.2012, 10:08   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
size = new int;
*size = 0;
Что это?
Убери! Срочно!
Код:
int *size;
на
Код:
int size;
Код:
*size = 0;
  buf = new char[*size];
Создваешь буфер нулевой длины? Круто! Присвой какое-нибудь вразумительное значение, хотя бы 128.

Код:
Hex(string& _str){
      size = new int;
      *size = _str.length();
      buf = _str.begin();
   }
   Hex(char* _str){
      size = new int;
      *size = strlen(_str);
      buf = _str;
а где выделение памяти?
Код:
buf = new char[*size];
Код:
buf = _str.begin();
значение итератора присваиваешь буферу, тоже ниче так. Тогда уж
Код:
buf = &(*_str.begin());
Но таким макаром буфер не заполнишь. Accsess violation время от времени, может быть не сразу, может иногда, гарантирован. Нужно выполнить глубокое копирование.

А тут:
Код:
for (int i = 0; i < *size; i++)
         buf = obj.buf;
size раз присваиваешь один указатель другому.

Код:
for (int i = 0; i < *size; i++)
         buf[i] = obj.buf[i];
Давай как нить в этом духе:
Код:
Hex(char* _str){
      size = strlen(_str);
      buf = new char[size+1];//1 для хранения нуль-символа
      strcpy(buf, _str);
 }
или вместо strcpy
Код:
for (int i = 0; i < size; i++)
         buf[i]= _str[i];
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 06.04.2012 в 10:55.
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
Создание своего класса на основе базового TControl Lich87 Общие вопросы C/C++ 1 22.06.2010 18:29
Сохранение обьекта своего класса joker815 Помощь студентам 0 19.05.2010 17:59
Создание своего класса, наследование от предка Krechet Общие вопросы Delphi 16 02.05.2009 16:15
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28