[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: c++ question: alloc'ing and free'ing arrays
From: Marcos Dione <mdione () grulic ! org ! ar>
Date: 2002-08-03 18:05:24
[Download RAW message or body]
a friend of mine is developing a class that has lots of arrays of
different types (POD and non-POD types), and the class must resize
those arrays (some are even matices) on runtime.
so, when using a POD type, she uses
array= NULL;
in the default constructor,
array= new int[size];
in other constructors (ones that already know which is the size the array should be),
delete[] array;
in the destructor and
if (array!=NULL)
delete[] array;
array= new int[size]
in the resize method. with non-POD types, she uses
npt **npa;
npa= NULL;
npa= new npt* [size]
for (int i= 0; i<size; i++)
npa[i]= new npt;
for (int i= 0; i<size; i++)
delete npa[i];
delete[] npa;
if (npa!=NULL) {
for (int i= 0; i<size; i++)
delete npa[i];
delete[] npa;
}
npa= new npt* [size]
for (int i= 0; i<size; i++)
npa[i]= new npt;
in the same places respectively.
now, the problem is that in certain circumstances the resize methods
segfault in the new (!!!) statement. using gdb, running the test
program I get this backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x400fdaae in free () from /lib/libc.so.6
(gdb) bt
#0 0x400fdaae in free () from /lib/libc.so.6
#1 0x400fd77a in malloc () from /lib/libc.so.6
#2 0x400fcf54 in malloc () from /lib/libc.so.6
#3 0x400588f9 in __builtin_new () from /usr/lib/libstdc++-libc6.2-2.so.3
#4 0x40058adf in __builtin_vec_new () from /usr/lib/libstdc++-libc6.2-2.so.3
#5 0x0804aa83 in Network::create_errores (this=0x8054938, num_neurons_output=1) at Network.cpp:388
#6 0x0804c140 in operator>> (s=@0xbffffcb8, ntk=@0x8054938) at Network.cpp:657
#7 0x0804900b in main ()
#8 0x400a814f in __libc_start_main () from /lib/libc.so.6
(the create_errores method is a resize method that resizes a POD array
with size= num_neurons_output which is 1). also, looking @ kde's code
for reference, I find that a lot of new statements that alloc arrays
that are not deleted later (examples includes some noatun plugins in
the kdeaddons module, like synaescope.cpp in tippercanoe), or even
arrays that I think are bad deleted, like the cr array in
kdebase/kcontrol/crypto/crypto.cpp:KCryptoConfig::slotCAImport (I
think it should be delete[] instead of delete)
also, I don't guess *why* new (actually, malloc) is calling free! is
it a libc bug? I don't think so. what's more strange is that the same
code works on other circumstances, like in the constructor. I hope you
can give me a hint on what's going on... also, I would like to know
about any lib that can store and retrieve objects to/from disk. as you
can see, she's trying to parse a Network from an istream.
thanks in advance
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic