| Karim Belabas on Sun, 06 Jun 2010 09:20:30 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: C++ new and delete like malloc and free? |
* Daniel Allcock [2010-06-05 21:04]:
> I'll probably be spamming the list for a little while since I'm
> working on a project, so thanks for your patience.
No problemo :-)
> I'm developing a program in C++ that uses libpari. I know that pari
> has wrappers around malloc and free, namely pari_malloc and pari_free,
> and that using them protects against stack corruption problems in the
> presence of a SIGINT.
>
> The docs say pari is C++ compatible, and there is no mention of
> analogous problems for operators new and delete in C++. Is the same
> issue present? If so, what do I do to address it? Just trying to be
> careful.
The same (very rare!) issue is present, but need only be a concern under gp.
Or if your project also intercepts SIGINT, longjmp'ing to some other
context and letting the program go on.
I guess you can write analogous wrappers pari_new() and pari_delete(),
but the genuine problem is that longjmp() is dangerous in C++ programs
(undefined behaviour if replacing the setjmp/longjmp by catch/throw
would destroy any automatic object). One should really use proper C++
exceptions is this case.
This is not a problem when you call a PARI library function from a C++
program (no automatic objects would be destroyed when longjmp'ing out of
a PARI function), but it does become one if you use gp or a gp-like
shell using longjmp to recover from errors (see example/minigp.c) to
call C++ code.
Cheers,
K.B.
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]
`