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