Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 3.086 pregleda

Najnovija ↓

Opet bag GNU C++ prevodioca! 05.03.2011. u 21:53 · pre 190 meseci
izmenjeno 1 put, poslednji put Nedeljko 05.03.2011. u 22:39
  1. Nedeljko05.03.2011. u 22:39zapis iz teksta poruke
#1
Hteo sam da isprobam zanimljiv fenomen o broju \pi u Mandelbrotovom skupu. Program dajem u prilogu.

Koristim g++ 4.5.0 pod 32-bitnim openSUSE 11.3 sistemom i sve radi lepo bez optimizacije. Međutim, uključim li optimizaciju, program puca!

Program radi ispravno ako se operator + na sledeći način:

Code:
complex operator+ (const complex &z) const {
    complex result(*this);
    
    result += z;
    
    return result;
}


ili ako u main funkciji z1 računam sa

Code:
z1 = z*z;
z1 += c;


Voleo bih da mi još neko potvrdi da je ovo bag, pa da ga prijavljujem.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 00:34 · pre 190 meseci #2
g++ mandelbrot.cpp -o mandelbrot
./mandelbrot
3.1416000000000002569

g++ mandelbrot.cpp -o mandelbrot -O3
segmentation fault

g++ --version

g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Ubuntu 10.10
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 01:03 · pre 190 meseci #4
A sta se desava kada izmenis nekoliko operatora koji su nekompletni ( ne vracaju rezultat ):

Code:


    complex& operator= (const complex &z) {
    if (this != &z) {
        re = z.re;
        im = z.im;
    }
    return *this;
    }
//...

    complex& operator+= (const complex &z) {
    re += z.re;
    im += z.im;
    return *this;
    }

//...

    complex& operator-= (const complex &z) {
    re -= z.re;
    im -= z.im;
    return *this;
    }




Potpis
Tko leti vrijedi
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 01:17 · pre 190 meseci #6
O, hvala! Koji mi je đavo! Svašta! Ne mogu da verujem da sam toliki slepac da ne vratim *this. Čak ni da uključim upozorenja!

@kiklop74
U ovom slučaju provera da li je &z==this nije potrebna, ali znam da je u opštem slučaju potrebna.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 01:18 · pre 190 meseci #7
U svakom slučaju, dobro je da sam se prvo javio ovde, da ne prijavljujem kao "bag" nešto što nije 100% provereno.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 17:56 · pre 190 meseci #10
Citat:
@kiklop74
U ovom slučaju provera da li je &z==this nije potrebna, ali znam da je u opštem slučaju potrebna.


U ovom slucaju operator= nije potreban, kao ni konstruktor kopije.
Re: Opet bag GNU C++ prevodioca! 06.03.2011. u 19:02 · pre 190 meseci #11
I to je tačno, jer podrazumevane varijante rade na potpuno isti način, ali eto, hteo sam da raspišem. Narafski.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme