Hi,
On Wed, 16 Apr 2003, Georg Wagner wrote:
wieder falscher cast. array[0] hat Typ "char *", nicht "char".
Hm, sollte der Compiler dann nicht eine Waring ausspucken?
% cat bla.c
#include
void f(void)
{
char **a;
char *b;
a = (char*) malloc (100);
b = (char) malloc (100);
}
% gcc -c bla.c
bla.c: In function `f':
bla.c:7: warning: assignment from incompatible pointer type
bla.c:8: warning: cast from pointer to integer of different size
bla.c:8: warning: assignment makes pointer from integer without a cast
I.e. sogar ohne jede -W Option wird hier gewarnt. Insbesondere auch ueber
den alles kaputt machenden (char) cast. Was er tut ist, den
pointer von malloc in ein char umwandeln, i.e. in irgendwas zwischen 0 und
255, womit dieser Pointer reichlich invalid wird. Deshalb die etwas
elaborierten Warnungen fuer Zeile 8. Bei einem Mismatch zwischen (char*)
und (char**) sind beides wenigstens noch Pointer, aber eben trotzdem
unterschiedlich (deshalb die Warnung in Zeile 7).
Und trotz der Warnung oben sollte man immer mit "-W -Wall" uebersetzen,
und von Anfang an alles bemaekelte fixen. Dann ist die Wahrscheinlichkeit
recht hoch, dass das Ergebnis auch auf x86-64, ppc oder wo auch immer tut
(oder wenigstens wenig Portieraufwand erfordert).
Ciao,
Micha.