lz定义 int *e;也就是说定义一个指向整形的指针e但是后面没有了。。。
也就是说 e是一个指针了,系统知道它是指向一个整形 但是lz在程序里面并没说它指向哪一个!
那么 e 也就沦落为了野指针 e里面的值是表示的地址,但是具体指向的哪个地址 ---- 不知道,lz没有个给它指定的整形分配内存空间(甚至没有进行初始化来说明指向谁),后果难以预料,非常危险(可能该e不可用导致程序崩溃,或者非法访问到某些关键内存,导致电脑出问题)。
至少应该这样: int x; int *e; e = &x; 这样 e 就能用了。
同样在被调函数:int gcd(Fraction *a,Fraction *b) 里面 也有这样的问题: int *t; t 是野指针。
如果这个函数调用改了以后,又有一个问题,gcd里面是指针访问,会改变void SuMTFfraction(Fraction a,Fraction b,Fraction *c)这个函数里面 a b的值的,当gcd调用结束,再进行c->r=*e/a.s*a.r+*e/b.s*b.r; 的语句,结果应该不会是你想要的类型了。因为a.sb.s 值可能已经变的面目全非了。 解决这个问题 嗯 你可以吧gcd改为值传递方式,或者在gcd里面通过中间变量来进行:(如下)
int x; int y; int z; t = &x; y = a -> s; z = b -> s; 然后再用辗转相除 返回一个值...