Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Добрый день всем гуру.

Сегодня не пойму что произошло и начал сбоить код, который стабильно работал.

Итак, студия Embarcadero 10.1 Berlin, ODAC 10.3.9. Есть модуль, который отвечает за обращение к БД через TOraStoredProc.
unit PkMop;

interface

uses Classes, SysUtils, Ora, OraPackage, System.Variants, OraUtils,
  System.Generics.Collections, Data.DB, OraClasses, JclSysUtils;

TPkMop = class(TCustomOraPackage)
  private
    FSession: TOraSession;
    procedure GetStoreProc;
    function GetSession: TOraSession;
    procedure SetSession(AValue: TOraSession);
    procedure SetParam(AParamName: string; AList: TList<Integer>); overload;
    procedure SetParam(AParamName: string; AList: TList<string>); overload;
    procedure SetParam(AParamName: string; AList: TList<Double>); overload;
    procedure SetParam(AParamName: string; AList: TList<Variant>); overload;
    procedure GetParam(AParamName: string; AList: TList<Integer>); overload;
    procedure GetParam(AParamName: string; AList: TList<string>); overload;
    procedure GetParam(AParamName: string; AList: TList<Double>); overload;
  protected
    StoredProc: TOraStoredProc;
  published
    property Name;
    property Session: TOraSession read GetSession write SetSession;
  public
    //тут сами вызовы 
  end;

implementation

constructor TPkMop.Create(AOwner: TComponent);
begin
  inherited;
  StoredProc := TOraStoredProc.Create(nil);
end;

procedure TPkMop.GetStoreProc;
begin
  StoredProc.Session := Session;
  StoredProc.StoredProcName := '';//ошибка вылетает тут
  StoredProc.Prepared;
end;


GetStoreProc - инициализация компонента, несколько обращений к ней проходит нормально, но потом бьет ошибку. При повторном вызове вылетает AV.

В чем может быть проблема? Заранее благодарю за конструктивный ответ
27 мар 19, 17:56    [21845303]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Отладчик используй.
27 мар 19, 18:15    [21845315]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1150
Пожалуйста уточните, в качестве StoredProcName Вы указываете именно значение '', либо-же имя какой-то определенной хранимой процедуры ? Во втором случае, можете ли Вы предоставить DDL-скрипт для ее создания
27 мар 19, 18:21    [21845321]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
devart
Пожалуйста уточните, в качестве StoredProcName Вы указываете именно значение '', либо-же имя какой-то определенной хранимой процедуры ? Во втором случае, можете ли Вы предоставить DDL-скрипт для ее создания


Вылетает исключительно на пустом значении. Причем один раз отрабатывает правильно, второй раз уже бьет ошибку.
Убирал процедуру инициализации TOraStoredProc, било и на существующем имени процедуры. Но опять начиная со второго раза.
27 мар 19, 19:00    [21845350]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Foxpc,

используя отладчик я нашел место где оно вылетает. Код для чего я приложил?
27 мар 19, 19:06    [21845356]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
Леонов Юрий,

он имел ввиду внутри сеттера StoredProcName
27 мар 19, 19:12    [21845363]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Arioch
Леонов Юрий,

он имел ввиду внутри сеттера StoredProcName

у меня нет исходников, чтобы внутри лазить. К тому же до сегодняшнего дня все работало отлично. Проверил все изменения - никто в данном разделе ничего не правил. Остается только гадать, откуда вылезла эта ошибка.
27 мар 19, 19:23    [21845376]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Мне почему то кажется, что память потекла где - то. Такое часто бывает, когда она течёт. К примеру кто то двинул указатель строки, и не вернул на место. И вот, такие трюки идут по одному месту

Так что, может быть виноват любой код. И искать такие ошибки можно пару месяцев
27 мар 19, 19:46    [21845398]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Cobalt747
Member

Откуда:
Сообщений: 2128
Вангую освобождение (Free) объекта
28 мар 19, 07:03    [21845639]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Cobalt747
Вангую освобождение (Free) объекта

Объект создается вызовом извне (конструктором Create) и удаляется тоже извне (вызовом Destroy). Пока живет форма, до тех пор живет и этот компонент. Код не менялся, просто резко начали сыпаться ошибки
28 мар 19, 09:52    [21845757]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
Леонов Юрий
несколько обращений к ней проходит нормально, но потом бьет ошибку


какую???

Леонов Юрий
. К тому же до сегодняшнего дня все работало отлично.


но сейчас не работает

ищи либо место, где ошибка проявляется (если раньше не проявлялась, не значить что ее не было, возможно просто не проявлялась)

либо то изменение в твоей программе или БД, которое помогло ошибке проявиться
28 мар 19, 11:50    [21845924]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Arioch
Леонов Юрий
несколько обращений к ней проходит нормально, но потом бьет ошибку


какую???

Внимательно читаем заголовок темы

Arioch
Леонов Юрий
. К тому же до сегодняшнего дня все работало отлично.


но сейчас не работает

ищи либо место, где ошибка проявляется (если раньше не проявлялась, не значить что ее не было, возможно просто не проявлялась)

либо то изменение в твоей программе или БД, которое помогло ошибке проявиться


Она проявляется в разных местах, но всегда на строке типа
StoredProc.StoredProcName := 'имя процедуры';

Причем имя может быть как пустой строкой, так и реальным из БД
28 мар 19, 16:59    [21846363]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13352
Леонов Юрий
При повторном вызове вылетает AV.


конкретнее
28 мар 19, 17:06    [21846371]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Леонов Юрий,

если что, он просит полный стэк, в левом верхнем углу. Со всеми подробностями
28 мар 19, 17:14    [21846381]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Такие ошибки очень сложно ищаться. Если это утечка памяти. А тс ничего не хочет приводить в пример кода, кроме того участка, где проявляется диагноз
28 мар 19, 17:15    [21846385]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1306
Леонов Юрий
...
...
  StoredProc.StoredProcName := '';//ошибка вылетает тут
...

...


Ошибка
Леонов Юрий
"this type cannot consist in table"


Солнышко, такая ошибка в указанном месте "вылетать" не может.
Придется тебе рыть внутри сеттера свойства StoredProcName и, возможно, еще глубже.
28 мар 19, 17:50    [21846447]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
ёёёёё,

мне кажется разрабы Ora хорошо отладили свой код. Так что вряд ли к ним есть притенения
28 мар 19, 18:15    [21846485]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
К тому же есть глянуть, это обычный
property StoredProcName: string;
28 мар 19, 18:16    [21846487]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1306
Foxpc
ёёёёё,

мне кажется разрабы Ora хорошо отладили свой код. Так что вряд ли к ним есть притенения

Ну вот они тебе нормальное сообщение и выдали, а не какой-нибудь "AV".


Foxpc
К тому же есть глянуть, это обычный
property StoredProcName: string;

Ой, неграмотный какой.

Ну ты попробуй в своем коде тоже так проперь задекларировать, без указания имплементации.
28 мар 19, 18:24    [21846493]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
ёёёёё,

Ясно. Дурачoк какой то ты. ТС говорил что у него ошибка, при присвоение любого текста к обычному свойству, созданного объекта

Так что, не надо тут умничать как будто ты всё знаешь.

Моя позиция - утечка памяти, в где то в проекте. Строки могут совершенно никак между собою связаны. Просто менеджер памяти испорчен.
28 мар 19, 18:53    [21846525]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Foxpc
Такие ошибки очень сложно ищаться. Если это утечка памяти. А тс ничего не хочет приводить в пример кода, кроме того участка, где проявляется диагноз


Кода дохрена, весь проект приводить смысла не вижу.
29 мар 19, 09:39    [21846790]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
ёёёёё
Солнышко, такая ошибка в указанном месте "вылетать" не может.
Придется тебе рыть внутри сеттера свойства StoredProcName и, возможно, еще глубже.


Солнышко??? Я похож на блондинку? То есть вы считаете, что я выдумал проблему?
Повторяюсь, исходников у меня нет, рыть в глубь, соответственно, тоже не могу
29 мар 19, 09:41    [21846792]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Поискал исходники, нашел правда не совсем свежие.
Данная ошибка может вылетать только на инициализации процедурных переменных.
Но присвоение пустой строки не должно вызывать эту инициализацию...
В чем глюк - не пойму. Может прав Foxpc и тут проблемы не касаются напрямую компонента...
29 мар 19, 10:21    [21846823]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Cobalt747
Member

Откуда:
Сообщений: 2128
Леонов Юрий,

Сделай поиск по всему проекту с вызовом Free или Destroy.
29 мар 19, 11:00    [21846855]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
Cobalt747
Сделай поиск по всему проекту с вызовом Free или Destroy.


....а там окажется освобождение через ARC или TComponent.Owner или ещё как

вообще, ты что найти пытаешься, use after free?

для этого проще FreeMem перекрыть, чтобы всю свежеотпущенную память забивала каким-нибудь $DeadBeef
и смотреть где в разнос пойдёт.

Кстати в Windows LAllocMem/LFreeMem таки память затирают на освобождении (они на скорость не претендуют, так что могут себе позволить). Когда я писал "рекордный" плагин - DLL размером 2KB - то именно так нашёл баг в хостовом приложении, при исключении из Delphi 5 RTL "стандартного" heap manager всё начинало сыпаться.
29 мар 19, 12:10    [21846944]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11257
Arioch
для этого проще FreeMem перекрыть, чтобы всю свежеотпущенную память забивала каким-нибудь $DeadBeef
и смотреть где в разнос пойдёт.
А не проще раз подключить FastMM и навсегда забыть о проблемах с памятью?
29 мар 19, 15:00    [21847155]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
_Vasilisk_,

и чем же FastMM поможет против double-free или use-after-free ?

против этого поможет только одно - вообще никогда не освобождать память.
29 мар 19, 15:10    [21847187]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11257
Arioch
и чем же FastMM поможет против double-free или use-after-free ?
Тем, что при первом обращении к убитому объекту даст по рукам. И еще скажет где именно и при каких обстоятельствах объект был убит
29 мар 19, 15:12    [21847192]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
_Vasilisk_
Тем, что при первом обращении к убитому объекту даст по рукам.


все последние Delphi исплользуют FastMM.
Кажется даже старушка D2006.

в каком смысле в этих версиях Delphi можно "навсегда забыть о проблемах с памятью" ?
и в каком смысле современные Delphi "при первом обращении к убитому объекту дают по рукам" ?

+
program Project41;
//    Delphi XE2, на борту FastMM как и у всех

{$APPTYPE CONSOLE}

{$R *.res}

type TObj = class
  strict private
    FPayload2: string;
    FPayload1: double;
    procedure SetPayload1(const Value: double);
    procedure SetPayload2(const Value: string);
  public
    property Payload1: double read FPayload1 write SetPayload1;
    property Payload2: string read FPayload2 write SetPayload2;
end;

{ TObj }

procedure TObj.SetPayload1(const Value: double);
begin
  FPayload1 := Value;
end;

procedure TObj.SetPayload2(const Value: string);
begin
  FPayload2 := Value;
end;

var o: TObj;

procedure Dump(const o: TObj);
begin
  Writeln ( o.Payload1 :20 :10, ' - ', o.Payload2 );
end;

begin
  o := TObj.Create;
  o.Payload2 := 'ABCDF';
  o.Payload1 := Pi;

  Dump(o);
  o.Destroy;
  Dump(o);

(*** по рукам никто не стукнул, в консоли ожидаемое:
        3.1415926536 - ABCDF
        3.1415926536 -
****)

  Readln;
end.
29 мар 19, 15:30    [21847235]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11257
Arioch
все последние Delphi исплользуют FastMM.
Кажется даже старушка D2006.
Угу. Только он куцый

+
program Project41;

uses
  FastMM4,
  System.SysUtils;

{$APPTYPE CONSOLE}

{$R *.res}

type TObj = class
  strict private
    FPayload2: string;
    FPayload1: double;
    procedure SetPayload1(const Value: double);
    procedure SetPayload2(const Value: string);
  public
    property Payload1: double read FPayload1 write SetPayload1;
    property Payload2: string read FPayload2 write SetPayload2;
end;

{ TObj }

procedure TObj.SetPayload1(const Value: double);
begin
  FPayload1 := Value;
end;

procedure TObj.SetPayload2(const Value: string);
begin
  FPayload2 := Value;
end;

var o: TObj;

procedure Dump(const o: TObj);
begin
  Writeln ( o.Payload1 :20 :10, ' - ', o.Payload2 );
end;

begin
  try
    o := TObj.Create;
    o.Payload2 := 'ABCDF';
    o.Payload1 := Pi;

    Dump(o);
    o.Destroy;
    Dump(o);
  except
    on E: Exception do
      Writeln(E.Message);
  end;
  Readln;
end.
        3.1415926536 - ABCDF
2.08141644278E-0307 - Access violation at address 769028D9 in module 'KERNELBASE.dll'. Read of address 00437000

Arioch
и в каком смысле современные Delphi "при первом обращении к убитому объекту дают по рукам" ?
Я не сказал про "современные Delphi". Я сказал про FastMM
29 мар 19, 16:32    [21847324]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11257
Arioch,

А если вот так
+
program Project41;

uses
  FastMM4,

............

begin
  try
    o := TObj.Create;
    o.Payload2 := 'ABCDF';
    o.Payload1 := Pi;

    Dump(o);
    o.Destroy;
    o.Destroy;
    Dump(o);
  except
    on E: Exception do
      Writeln(E.Message);
  end;
  Readln;
end.
Да с map файлом, то тогда вообще вот так
+

--------------------------------2019/3/29 15:33:08--------------------------------
FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation.

Freed object class: TObj

Virtual method: Destroy

Virtual method address: 405D9C

The allocation number was: 109

The object was allocated by thread 0x1890, and the stack trace (return addresses) at the time was:
403DEA
405D53
40634E
405D88
4223FD
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

The object was subsequently freed by thread 0x1890, and the stack trace (return addresses) at the time was:
403E06
405D71
406399
405DAA
42243B
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

The current thread ID is 0x1890, and the stack trace (return addresses) leading to this error is:
422447
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

Current memory dump of 256 bytes starting at pointer address 7FE8CCD0:
7C B2 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 A1 05 AC B1 00 00 00 00 91 CD E8 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 00 00 00 EA 3D 40 00 6F 70 40 00 58 72 40 00
2F 73 40 00 50 25 52 77 B6 55 52 77 61 88 55 77 40 C2 4F 77 EE 56 52 77 EE 56 52 77 9D 53 52 77
90 18 00 00 90 18 00 00 06 3E 40 00 11 71 40 00 57 50 40 00 84 51 40 00 B4 54 40 00 E2 F8 41 00
2F 24 42 00 E3 86 2B 77 99 BD 52 77 6C BD 52 77 00 00 00 00 10 00 00 00 B0 04 02 00 E5 22 C4 2B
7C B2 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 1A DD 3B D4 70 B5 42 00 00 00 00 00 31 CE E8 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 77 00 00 00 B0 70 40 00 63 77 40 00 C8 73 40 00
12 54 40 00 6B 53 40 00 28 50 40 00 84 51 40 00 B4 54 40 00 E2 F8 41 00 2F 24 42 00 E3 86 2B 77
| І B . p µ B . p µ B . p µ B . p µ B . Ў . ¬ ± . . . . ‘ Н и 
. . . . . . . . . . . . . . . . v . . . к = @ . o p @ . X r @ .
/ s @ . P % R w ¶ U R w a € U w @ В O w о V R w о V R w ќ S R w
ђ . . . ђ . . . . > @ . . q @ . W P @ . „ Q @ . ґ T @ . в ш A .
/ $ B . г † + w ™ Ѕ R w l Ѕ R w . . . . . . . . ° . . . е " Д +
| І B . p µ B . p µ B . p µ B . . Э ; Ф p µ B . . . . . 1 О и 
. . . . . . . . . . . . . . . . w . . . ° p @ . c w @ . И s @ .
. T @ . k S @ . ( P @ . „ Q @ . ґ T @ . в ш A . / $ B . г † + w

--------------------------------2019/3/29 15:34:09--------------------------------
FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation.

Freed object class: TObj

Virtual method: Destroy

Virtual method address: 405D9C

The allocation number was: 109

The object was allocated by thread 0xA34, and the stack trace (return addresses) at the time was:
403DEA
405D53
40634E
405D88
4223FD [Project41.dpr][Project41][Project41.Project41][43]
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

The object was subsequently freed by thread 0xA34, and the stack trace (return addresses) at the time was:
403E06
405D71
406399
405DAA
42243B [Project41.dpr][Project41][Project41.Project41][48]
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

The current thread ID is 0xA34, and the stack trace (return addresses) leading to this error is:
422447 [Project41.dpr][Project41][Project41.Project41][49]
772B86E3 [BaseThreadInitThunk]
7752BD99 [Unknown function at RtlInitializeExceptionChain]
7752BD6C [Unknown function at RtlInitializeExceptionChain]

Current memory dump of 256 bytes starting at pointer address 7FE8CCD0:
7C B2 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 59 22 AC B1 00 00 00 00 91 CD E8 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 00 00 00 EA 3D 40 00 6F 70 40 00 58 72 40 00
2F 73 40 00 50 25 52 77 B6 55 52 77 61 88 55 77 40 C2 4F 77 EE 56 52 77 EE 56 52 77 9D 53 52 77
34 0A 00 00 34 0A 00 00 06 3E 40 00 11 71 40 00 57 50 40 00 84 51 40 00 B4 54 40 00 E2 F8 41 00
2F 24 42 00 E3 86 2B 77 99 BD 52 77 6C BD 52 77 00 00 00 00 10 00 00 00 B0 04 02 00 2D 06 C4 2B
7C B2 42 00 70 B5 42 00 70 B5 42 00 70 B5 42 00 D2 F9 3B D4 70 B5 42 00 00 00 00 00 31 CE E8 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 77 00 00 00 B0 70 40 00 63 77 40 00 C8 73 40 00
12 54 40 00 6B 53 40 00 28 50 40 00 84 51 40 00 B4 54 40 00 E2 F8 41 00 2F 24 42 00 E3 86 2B 77
| І B . p µ B . p µ B . p µ B . p µ B . Y " ¬ ± . . . . ‘ Н и 
. . . . . . . . . . . . . . . . v . . . к = @ . o p @ . X r @ .
/ s @ . P % R w ¶ U R w a € U w @ В O w о V R w о V R w ќ S R w
4 . . . 4 . . . . > @ . . q @ . W P @ . „ Q @ . ґ T @ . в ш A .
/ $ B . г † + w ™ Ѕ R w l Ѕ R w . . . . . . . . ° . . . - . Д +
| І B . p µ B . p µ B . p µ B . Т щ ; Ф p µ B . . . . . 1 О и 
. . . . . . . . . . . . . . . . w . . . ° p @ . c w @ . И s @ .
. T @ . k S @ . ( P @ . „ Q @ . ґ T @ . в ш A . / $ B . г † + w
29 мар 19, 16:37    [21847331]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
_Vasilisk_,

Похоже и так норм

К сообщению приложен файл. Размер - 30Kb
29 мар 19, 17:09    [21847386]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162


К сообщению приложен файл. Размер - 48Kb
29 мар 19, 17:11    [21847392]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
При удаление лучше юзайте FreeAndNil и не парьтесь.
29 мар 19, 17:17    [21847398]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11257
Foxpc
Похоже и так норм
Ты сравни абстрактную Invalid Pointer Operation и стек вызова последнего удаления
Foxpc
При удаление лучше юзайте FreeAndNil и не парьтесь.

var
  List: TList<TMyObj>;
  Obj: TMyObj;
begin
  ..........
  Obj := List[10];
  FreeAndNil(Obj);
  ..........
  Obj := List[10];
  ShowMessage(Obj.Data)
end;
29 мар 19, 17:58    [21847463]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
_Vasilisk_
Только он куцый


они пельмени, но они равиоли.

Т.е. если ты хочешь сказать "надо взять fastMM4 такой-то версии оттуда, так-то его подключить к программе и таким-то образом задать ему такие-то настройки" - то возражений нет

но когда ты говоришь "надо использовтаь fastmm4" - так его и так все используют. А куцый он или какой - это уже вопрос версий.

_Vasilisk_
Я не сказал про "современные Delphi". Я сказал про FastMM


а в современных Delphi и тaк по умолчанию FastMM4, из коробки.

_Vasilisk_
uses
  FastMM4,


Добавил, запустил. Ни-че-го не изменилось, никаких вам AV на пустом месте.

Вывод - либо версия FastMM4 другая, либо (более вероятно) настройки другие. Либо и то и другое.

Т.е. опять же, "подключи (другой какой-нибудь) FastMM4 и забудь о проблемах с памятью" не получается.
Нужно искать конкретную версию, потом в ней искать конкретную настройку.

_Vasilisk_
    o.Destroy;
    o.Destroy;


А double-free у объектов и "ненастоящий" FastMM в составе любой современной Delphi ловит.
29 мар 19, 19:02    [21847533]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
Foxpc
При удаление лучше юзайте FreeAndNil и не парьтесь.


Подход "я ни хрена не понимаю что у меня в программе происходит и не хочу понимать" работает в 99% случаев.
Зато в том 1%, когда он не работает, ты уже хрен докопаешься почему так произошло.

Хотя код типа такого я только пару дней назад видел
// FLOSS library for FPC, Delphi-compatible
function ...
var v1: array of ....;
var v2: TMyClassObject;

.....
  finally
     if Assigned(v2) then
        FreeAndNil(v2);
     if Length(v1) > 0 then 
     begin
        SetLength(v1, 0);
        v1 := nil;
     end; 
   end;
end;


Надеюсь, это его личные аберрации, а не необходимость при работе с FPC

Сообщение было отредактировано: 29 мар 19, 19:34
29 мар 19, 19:07    [21847538]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
А знаете волшебную пелюлю? А я знаю! Имя ей- FillChar для самых любителей по копировать адреса в переменные. А не передавать указатели
29 мар 19, 20:32    [21847582]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3397
Arioch,

FreeAnsNil - это не подход 'я ничего не понимаю'. это подход понять, что происходит и где что не так. юзайте FreeAnsNil всегда, очень помогает.
31 мар 19, 13:03    [21848220]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3397
Foxpc,

меньше слушай любителей хранить зомби-ссылки.
31 мар 19, 13:04    [21848222]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
makhaon
это не подход 'я ничего не понимаю'. это подход понять, что происходит и где


1) ты сам себе противоречишь

если тебе нужно каким угодно способом понять что и где у тебя происходит - это ровно то и означает, что ты этого не понимаешь

2) и если уж тебе хочется зачищать память - то надёжнее зачищать содержимое, а не указатели.
ОДНО изменение в программе и ВСЕ освобождаемые блоки в любых местах - становятся зачищены по содержимому.
31 мар 19, 17:22    [21848322]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3397
Arioch,

ответь на простой вопрос: зачем хранить зомби ссылки? есть причина? я как-то не могу себе представить, зачем зомби ссылки могут быть полезны. значит по-хорошему нужно от них избавляться. чистить память или нет - без разницы. очистка памяти сама по себе от зомби-ссылок не избавит.
31 мар 19, 22:24    [21848468]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Arioch
Member

Откуда:
Сообщений: 11041
я просто поменяю твои объекты местами.

ответь на простой вопрос: зачем хранить мусор в памяти? есть причина? я как-то не могу себе представить, зачем мусор в памяти может быть полезен. Значит по-хорошему нужно от него избавляться. Чистить ссылки или нет - без разницы. Очистка ссылок сама по себе от зомби-мусорв в памяти не избавит.


Если сумеешь ответить на этот вопрос - ответишь и на свой. Ответы будет идентичны друг другу, с точностью до той самой перестановки ссылок и памяти.
1 апр 19, 11:26    [21848769]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Одну ситуацию могу придумать, где бы для меня Не был полезен FreeAndNil. Если я создаю временный класс, и больше не всовываю в разные щели, не вканчивая адрес объекта в сомнительные места.

Ведь я постоянно храню адрес на 1 объект. А что случится дальше с адресом? Я могу проверить и через <> nil с Assigned тем же FreeAndNil после очистки.


В итоге у меня всё хорошо, адрес удалён, за нулен. Все ссылки на конечный объект показывают данные зануленного адреса
1 апр 19, 14:10    [21848966]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
type
  PButton = ^TButton;
var
  ButtonNew: TButton;
  PButtonNew: PButton;
begin
  ButtonNew := TButton.Create(NIL);
  PButtonNew := @ButtonNew;

  FreeAndNil(ButtonNew);
  if Assigned(PButtonNew^) then // PButtonNew^ = nil then
    ShowMessage('Коко');
end;
1 апр 19, 14:16    [21848972]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
*
if NOT Assigned(PButtonNew^) then // PButtonNew^ = nil then
1 апр 19, 14:18    [21848973]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Извиняюсь за отсутствие. Проблема решилась пересозданием экземпляра TOraStoredProc.
Не панацея, но результат достигнут. Хотя все-таки ситуация странная...
2 апр 19, 17:51    [21850484]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Ты просто записал на повреждённую память новый экземпляр класса. Проблема не решилась
2 апр 19, 21:50    [21850685]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Леонов Юрий
Member

Откуда: Украина, Харьков
Сообщений: 542
Foxpc
Ты просто записал на повреждённую память новый экземпляр класса. Проблема не решилась

С чего ты взял, что на поврежденную?
Перед вызовом какой либо процедуры я убиваю экземпляр класса, если он был создан ранее.
Затем создаю заново и работаю с новым экземпляром класса. Где здесь что-то повреждено?
3 апр 19, 16:16    [21851471]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка "this type cannot consist in table"  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Леонов Юрий
Перед вызовом какой либо процедуры я убиваю экземпляр класса, если он был создан ранее.
Нахрена? Дельфийской? Ораклиной? Ну Винду переустанови. :)
Смотри свой DDL .
__________________
Oracle yet nub i am
3 апр 19, 21:39    [21851836]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить