On Wed, 07 Sep 2011 17:08:08 -0700, Paul Taggart <[email protected]>
wrote:
It is wrong. You have to use 'const char*' in places where you use
these strings.
This enables compiler to store only one copy of identical texts and
identifie places where someone tries to modify string constant (it is
a bug). I have done this in my branch.
No, this is not a bug. the called functions are looking for a pointer to
a string (char *). By just providing a quoted string, you are providing
the function with the entire string, not just the pointer. The compiler
recognizes this discrepancy and automatically creates the pointer
By providing a string literal you are providing the function with a
pointer to read-only data. If you ever *ever* try to modify any
character in this region, you will get a segmentation fault.
but
unlike gcc which has the default option -Wno-write-strings, g++ defaults
to -Wwrite-strings which issues a warning message : "warning: deprecated
conversion from string constant to ‘char*’" for each occurrence.
The easy fix would be to add -Wno-write-strings to CXXFLAGS in all of the
Makefiles (can be set in configure.in) but I'm a bit of a purest who
believes its better to fix the problem than to mask it.
I think we all agree on that: -Wno-write-strings is just masking the
problem. However, adding (char *) to deprecated conversions from
(const char *) is actually worse, as it will not only mask the problem but
will also allow some functions to modify potentially immutable strings,
and thus make Cinelerra more crash-prone.
When you code something like this:
char * x = "abcde";
x[3] = '4';
g++ warns about the mistake. If you just shut it up by casting it to
(char *) like this:
char * x = (char *) "abcde";
x[3] = '4';
The compiler will not warn you and your program will still crash!
This is bad!
The correct fix (in this case only) is actually:
char * x = strdup("abcde");
x[3] = '4';
But you can not abuse this or you will end up wasting memory badly.
--
Octavio.
_______________________________________________
Cinelerra mailing list
[email protected]
https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra