Zmenseni objektu pomoci realloc (a Electric Fence)
Michael Mraka
michael na informatics.muni.cz
Pondělí Leden 31 16:12:40 CET 2000
Jan Kasprzak wrote:
% Zdravim,
%
% pri ladeni programu pomoci Electric Fence jsem narazil na problem:
% Pokud zavolam realloc() a pozaduji velikost objektu zmensit (nikoli zvetsit),
% muze mi realloc() vratit jiny pointer, nebo musi zachovat ten puvodni? Vypada
% to, ze alokato v Efence nezachovava puvodni umisteni ani pri zmenseni objektu.
% Je to legalni?
%
% Single Unix Spec pise:
% : If the new size of the memory object would require movement of the object,
% : the space for the previous instantiation of the object is freed.
%
% coz nic vlastne nerika :-(
%
% Jak to tedy je?
Me z toho plyne, ze zakazano to neni. Pokud bych ja byl autorem EFence,
pak bych take zmenil umisteni i pri zmenseni objektu. Jednoduse pro to,
ze 'nepocitani' se zmenou pointeru pri realokaci struktury, je castou
programatorskou chybou, kterou se prave EFence snazi odhalovat :-).
Pokud bude ta zmena dana dynamicky (obsahem promenne), pak by se mohlo
stat, ze pri ladeni budes vzdy zmensovat a chybu neobjevis (projevi se
za nedeterministickymi pady za behu, protoze nastane vyjimka a budes
chtit reallocem zvetsit).
Cili podle mne je to dano filosofii EFence a tedy pokud budes na zmenu
pointeru pripraven, nemuzes nic pokazit (skoro --- bude to pomalejsi :-).
% -Yenya
--mm Michael Mráka
Další informace o konferenci Linux