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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2011, 11:39   #1
GDA230105
Новичок
Джуниор
 
Регистрация: 23.02.2011
Сообщений: 1
По умолчанию роблема с созданием объекта динамического массива Класса

Пишу в С++Builder 6. При работе программы вылетает ошибка на строке BookS[kolvo] = Buf; //Внесение данных в динамический массив..
Ошибка следующего содержания: Project BookZ.exe raised exception class EAccessViolation with message 'Access violation at sddress 400068A4 in module 'rtl60.bpl'. Write of address 00000000'. Process stopped. Use Step or Run to continue.
Подскажите выход из ситуации- в чем ошибка и как исправить?

функция класса:
Код:
void Tlibrary_list::AddBook (const AnsiString way_to_the_book,const AnsiString way_to_the_cover,const AnsiString name,const AnsiString author,const AnsiString publishing_house,const int year_of_publication,const int pages,const AnsiString language)
{
TBookS Buf; //Временный объект хранения данных по книге
Buf.way_to_the_book=way_to_the_book; //Путь к книге
Buf.way_to_the_cover=way_to_the_cover; //Путь к обложке
Buf.name=name; //Название
Buf.author=author; //Автор
Buf.publishing_house=publishing_house; //Издательство
Buf.year_of_publication=year_of_publication; //Год издания
Buf.pages=pages; //Кол-во страниц
Buf.language=language; //Язык
BookS = (TBookS*)ReallocMemory(BookS, (kolvo+1)*sizeof(Buf)); // переопределение размера массива
BookS[kolvo] = Buf; //Внесение данных в динамический массив
kolvo=kolvo+1; // кол-во книг в списке
}
Описание класса TBookS
Код:
class TBookS //Библиотечный перечень
{
public: // User declarations
TBookS(void); //Конструктор информации о книге
//Первичные данные
AnsiString way_to_the_book; //Путь к книге
AnsiString way_to_the_cover; //Путь к обложке
//подробности о книге
AnsiString name; //Название
AnsiString author; //Автор
AnsiString publishing_house; //Издательство
int year_of_publication; //Год издания
int pages; //Кол-во страниц
AnsiString language; //Язык
};

Последний раз редактировалось Stilet; 26.07.2011 в 09:31.
GDA230105 вне форума Ответить с цитированием
Старый 26.07.2011, 08:18   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Эта ошибка возникает из-за того, что неверно организована инициализация класса.
Вы пытаетесь к элементам класса, обратиться как к элементам структуры.
Цитата:
Access violation at sddress 400068A4 in module 'rtl60.bpl'. Write of address 00000000'
Билдер Вам сообщает, что вы пытаетесь обратиться к адресу - 400068A4, а фактически обращаетесь к 00000000.
Ниже дан пример правильной инициализации класса.
Код:
TBookS Buf = new TBookS(); //Временный объект хранения данных по книге
Buf->way_to_the_book=way_to_the_book ; //Путь к книге
.........................
delete Buf;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.07.2011, 09:22   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Билдер Вам сообщает, что вы пытаетесь обратиться к адресу - 400068A4
Уж точно не так... Это место, где возникл эксепшн, адрес команды
p51x вне форума Ответить с цитированием
Старый 26.07.2011, 09:25   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Уж точно не так... Это место, где возникл эксепшн, адрес команды
Да, да, точно. Теорию немного подзабыл.
Но метод устранения верен.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24
Проблемы с созданием объекта своего типа,С# roadzero Помощь студентам 4 04.04.2011 17:23
Проблема с созданием класса Arkuz Общие вопросы Delphi 10 18.04.2010 14:18
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
динамический родитель динамического объекта russianstrike Компоненты Delphi 6 03.10.2008 22:07