Проблема с оператором delete
От: _Sheff_  
Дата: 30.07.06 06:12
Оценка:
Здравствуйте, просьба помочь разобраться с маленьким кодом. Windows XP, Borland C++ 5
Есть dll, с классом(скомпиллирована без untime packages & dynamic RTL)

.
.
.
#include <windows>
#include <stdlib>
#include <conio>
#include <stdio>
#include <iostream>
#include <system.hpp>
#include <vector>
using namespace std;

class __EXPORT_TYPE CDecoder
{
 public:
  CDecoder();
  void Decode(AnsiString Data);
  bool Get_Integrity_Status();
 //private:
  AnsiString Rec_String;
  vector<AnsiString> Decoded_Words;
  bool String_Integrity;
};
.
.
.
.


Подсоединяю ее к приложению, создаю обьект из длл-ки

void __fastcall TForm1::Button1Click(TObject *Sender)
{
CDecoder *Decoder;
Decoder = new CDecoder;
.
.
.
delete Decoder; //выдает ошибку Invalid pointer operation
.
.

Специально проверил, удаление вызывается только один раз.если оператор delete убрать — ошибок нет. Хотелось бы узнать это нормально или я где-то ошибку допустил?

благодарю за помощь,извините если вопрос может быть поставлен несколько криво...я просто в программировании не профи,- учусь пока...
Re: Проблема с оператором delete
От: Jonathan  
Дата: 30.07.06 08:20
Оценка: 1 (1)
Здравствуйте, _Sheff_, Вы писали:

_S_>Здравствуйте, просьба помочь разобраться с маленьким кодом. Windows XP, Borland C++ 5

_S_>Есть dll, с классом(скомпиллирована без untime packages & dynamic RTL)

_S_>
_S_>.
_S_>.
_S_>.
_S_>#include <windows>
_S_>#include <stdlib>
_S_>#include <conio>
_S_>#include <stdio>
_S_>#include <iostream>
_S_>#include <system.hpp>
_S_>#include <vector>
_S_>using namespace std;

_S_>class __EXPORT_TYPE CDecoder
_S_>{
_S_> public:
_S_>  CDecoder();
_S_>  void Decode(AnsiString Data);
_S_>  bool Get_Integrity_Status();
_S_> //private:
_S_>  AnsiString Rec_String;
_S_>  vector<AnsiString> Decoded_Words;
_S_>  bool String_Integrity;
_S_>};
_S_>.
_S_>.
_S_>.
_S_>.
_S_>


_S_>Подсоединяю ее к приложению, создаю обьект из длл-ки


_S_>
_S_>void __fastcall TForm1::Button1Click(TObject *Sender)
_S_>{
_S_>CDecoder *Decoder;
_S_>Decoder = new CDecoder;
_S_>.
_S_>.
_S_>.
_S_>delete Decoder; //выдает ошибку Invalid pointer operation
_S_>.
_S_>.
_S_>

_S_>Специально проверил, удаление вызывается только один раз.если оператор delete убрать — ошибок нет. Хотелось бы узнать это нормально или я где-то ошибку допустил?

_S_>благодарю за помощь,извините если вопрос может быть поставлен несколько криво...я просто в программировании не профи,- учусь пока...


Я не проверял, но мне кажется что проблемма такая:
new виделяет память на heap который принадлежит dll
a delete стирает память, которая принадлежит твоему процессу
попробуй изменить определение проекта, не знаю где в Borland,
но в VC ето ProjectSettings -> C++ ->
Use run time library = Multithreaded DLL / Debug Multithreaded DLL
"If everything seems under control, you're just not going fast enough"
Re[2]: Проблема с оператором delete
От: _Sheff_  
Дата: 30.07.06 14:54
Оценка:
Здравствуйте, Jonathan, Вы писали:

J>Здравствуйте, _Sheff_, Вы писали:


_S_>>Здравствуйте, просьба помочь разобраться с маленьким кодом. Windows XP, Borland C++ 5

_S_>>Есть dll, с классом(скомпиллирована без untime packages & dynamic RTL)

_S_>>
_S_>>.
_S_>>.
_S_>>.
_S_>>#include <windows>
_S_>>#include <stdlib>
_S_>>#include <conio>
_S_>>#include <stdio>
_S_>>#include <iostream>
_S_>>#include <system.hpp>
_S_>>#include <vector>
_S_>>using namespace std;

_S_>>class __EXPORT_TYPE CDecoder
_S_>>{
_S_>> public:
_S_>>  CDecoder();
_S_>>  void Decode(AnsiString Data);
_S_>>  bool Get_Integrity_Status();
_S_>> //private:
_S_>>  AnsiString Rec_String;
_S_>>  vector<AnsiString> Decoded_Words;
_S_>>  bool String_Integrity;
_S_>>};
_S_>>.
_S_>>.
_S_>>.
_S_>>.
_S_>>


_S_>>Подсоединяю ее к приложению, создаю обьект из длл-ки


_S_>>
_S_>>void __fastcall TForm1::Button1Click(TObject *Sender)
_S_>>{
_S_>>CDecoder *Decoder;
_S_>>Decoder = new CDecoder;
_S_>>.
_S_>>.
_S_>>.
_S_>>delete Decoder; //выдает ошибку Invalid pointer operation
_S_>>.
_S_>>.
_S_>>

_S_>>Специально проверил, удаление вызывается только один раз.если оператор delete убрать — ошибок нет. Хотелось бы узнать это нормально или я где-то ошибку допустил?

_S_>>благодарю за помощь,извините если вопрос может быть поставлен несколько криво...я просто в программировании не профи,- учусь пока...


J>Я не проверял, но мне кажется что проблемма такая:

J>new виделяет память на heap который принадлежит dll
J>a delete стирает память, которая принадлежит твоему процессу
J>попробуй изменить определение проекта, не знаю где в Borland,
J>но в VC ето ProjectSettings -> C++ ->
J>Use run time library = Multithreaded DLL / Debug Multithreaded DLL
Не помогло,но все равно спасибо.Я попытался протрейситьт программу,удалось выяснить что ошибка возникает в библиотеке STL если я правильно понял там происходит повторное очищение какого-то основного указателя название кажется base_*** дальше не помню..я в итоге оператор delete убрал и решил пока без него оставить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.