Ich habe diesen CodeFalsches Ergebnis in c-Code
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
double b;int a[2],*c;
void myfunction();
c=(int*)(malloc(1));
b=10.;
*c=5;
a[1]=1;a[2]=2;
printf("before call %f $d $d %d\n",b,a[1],a[2],*c);
printf("before call %f $d $d %d\n",b,a[1],a[2],*c);
myfunction(b,a,c);
printf("after call %f $d $d %d\n",b,a[1],a[2],*c);
}
void myfunction(x,y,d)
double x;int y[2],*d;
{
double z;
x=2*x;
y[1]=3*y[1];
y[2]=3*y[2];
*d =*d+2;
}
, wenn ich es ausführen ich erhalte diese
before call 10.000000 $d $d 1
before call 10.000000 $d $d 1
after call 10.000000 $d $d 3
Ich erwarte, dass bekommen 5 in der ersten und zweiten Anruf und 7 in den letzten Anruf, auch a [i] wird nicht angezeigt. Könnten Sie mir bitte raten warum? Danke
'%', nicht '$' ... –
'c = (int *) (malloc (1)); [...] * c = 5; Out-of-Bounds-Zugriff, undefiniertes Verhalten. – EOF
Auch FWIW Dieser Code ist super nicht-idiomatisch - Variablen verschiedener Typen, die in derselben Zeile deklariert sind, Funktionen, die in Funktionen deklariert sind, alte Funktionsdefinitionen. –