Bryan Scaringe [EMAIL PROTECTED] wrote: > It is my understandng that in order for C++ to "delete" a > dynamically-allocated > object, that object need to have been created via "new". > > That said, I'd like to see the code where you do the allocation.
You are right. the memory allocation is done using calloc. Somthing like this: void **new_hd = (void**)calloc(1, (list_count(l) + l->grow_size) * sizeof(void*)); So I replaced delete with free, and g++ seems happy again. But it still fails with some of the warning messages. Eg. if I compile with this: $ g++ -g -c misc.c misc.c: In function `char * cash(double, int, int)': misc.c:44: implicit declaration of function `int bracket(...)' misc.c:45: implicit declaration of function `int comma(...)' The output is exactly the same with the newest g++ version, and older g++. But the difference is that the older version will create a .o file and the new version will not. And I can only see an error message when they are compiled using make. Shao. > > Also, you may need to type-cast the void pointer. The new compiler version > may be more picky about that sort of thing (though if that's the case it > should > be a warning, not an error). > > The comp.lang.c++ people will peobably be more helpful though. > > If you do get a response, could you forward me a copy? thanks. > > Bryan > > > On 15-Feb-2000 Shao Zhang wrote: > > Hi, > > I have posted this to comp.lang.c++, but hope someone here can > > help me as well. Thanks. > > > > ===================== > > I have a c++ program that compiles fine with > > earlier version of g++, but it no longer compiles with > > the newsest release 2.95.2. > > > > Here is the relevant bit of code: > > > > typedef struct List > > { > > void **hd; /* first item */ > > void **cr; /* current item */ > > void **tl; /* last item */ > > void **mx; /* max item before growing is > > required */ > > int grow_size; > > } List; > > > > Some macros defined: > > > > #define fast_list_first(l) ((l && l->hd)? *(l->cr = l->hd) : 0) > > #define fast_list_last(l) ((l && l->hd)? *(l->cr = l->tl) : 0) > > > > And a Function like this: > > void lfree(List *l) > > { > > void *item; > > for (item=fast_list_first(l); item != NULL; > > item=fast_list_last(l)) > >###->>>> delete item; > > } > > > > > > When compiled with g++(2.95.2), it failed with this: > > [line 55 is the line marked with arrows above] > > % g++ -g -c misc.c > > misc.c: In function `void lfree(List *)': > > misc.c:55: warning: `void *' is not a pointer-to-object type > > > > It gives me the warning message, but no .o file is created, and > > if I put it in a makefile, it results: > > % make misc.o > > g++ -g -c misc.c > > misc.c: In function `void lfree(List *)': > > misc.c:55: warning: `void *' is not a pointer-to-object type > > make: *** [misc.o] Error 1 > > > > > > Thanks for any help in advance. > > > > Shao. > > > > > > -- > > ____________________________________________________________________________ > > Shao Zhang - Running Debian 2.1 ___ _ _____ > > Department of Communications / __| |_ __ _ ___ |_ / |_ __ _ _ _ __ > > _ > > University of New South Wales \__ \ ' \/ _` / _ \ / /| ' \/ _` | ' \/ _` > > | > > Sydney, Australia |___/_||_\__,_\___/ /___|_||_\__,_|_||_\__, > > | > > Email: [EMAIL PROTECTED] > > |___/ > > _____________________________________________________________________________ > > > > > > -- > > Unsubscribe? mail -s unsubscribe [EMAIL PROTECTED] < > > /dev/null > > -- ____________________________________________________________________________ Shao Zhang - Running Debian 2.1 ___ _ _____ Department of Communications / __| |_ __ _ ___ |_ / |_ __ _ _ _ __ _ University of New South Wales \__ \ ' \/ _` / _ \ / /| ' \/ _` | ' \/ _` | Sydney, Australia |___/_||_\__,_\___/ /___|_||_\__,_|_||_\__, | Email: [EMAIL PROTECTED] |___/ _____________________________________________________________________________