Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Laufzeitfehler bei Übergabe per Zeiger/Rückgabe des Zeigers

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.02.2017, 14:39 Uhr
Yadgar



Hi(gh)!

Folgendes Problem:

Die Funktion "blackandwhite" (soll Farbbilder in 1-bit-Schwarzbilder umwandeln)


C++:
void blackandwhite(vector<vector<pixel> > &img, unsigned short int d)
{
  unsigned short h = img.size();
  unsigned short w = img[0].size();
  unsigned short r, c;
  float v;
  
  cout << "Rastermodus: " << d << endl;
  
  switch(d)
  {
    case 0:
      for (r=0; r<h; r++)
      {
    for (c=0; c<w; c++)
    {
      v = img[r].at(c).getvalue();
      if (v < 128)
        img[r].at(c).set_all(0, 0, 0);
      else
        img[r].at(c).set_all(255, 255, 255);
    }
      }
    break;
    case 1:
      rgb col0;
      col0 = {0, 0, 0};
      palette.push_back(col0);
      rgb col1;
      col1 = {255, 255, 255};
      palette.push_back(col1);
      floydsteinberg(img, palette);
    break;
    default:
#ifdef DE
      cout << "Noch nicht implementiert!" << endl;
#endif
#ifdef EN
      cout << "Not yet implemented!" << endl;
#endif
    break;
    
  }
}



ruft, sofern mit Parameter für den Rastermodus 1 aufgerufen, die Funktion "floydsteinberg" auf:


C++:
void floydsteinberg(vector<vector<pixel> > &img, vector<rgb> &pal)
{
  unsigned short h = img.size();
  unsigned short w = img[0].size();
  unsigned short r, c, i;
  unsigned short p = pal.size();
  rgb t0, t1, t2, t3, t4, closest=pal.at(0);
  rgb *triple;
  
  for (r=0; r<h; r++)
  {
    for (c=0; c<w; c++)
    {
      t0 = *img[r].at(c).get_all(triple);          
      /* for (i=1; i<p; i++)
      {
          if (coldist(t0, pal.at(i)) < coldist(t0, closest))
            closest = pal.at(i);
          cout << "<" << closest.red << ", " << closest.green << ", " << closest.blue << ">" << endl;  
      } */

    }
  }


  cout << "Floyd-Steinberg-Rasterung wird berechnet!" << endl;
}



Dieser zweiten Position wird ein zweidimensionaler Vector aus Objekten der von mir selbst definierten Klasse "pixel" übergeben. Die Klasse "pixel" sieht so aus:


C++:
class pixel
{
  public:
    pixel(); // Standard-Konstruktor
    pixel (int, int, int); // Allgemeiner Konstruktor
    ~pixel(); // Destruktor
    void set_all(int, int, int);
    void set_red(int);
    void set_red(unsigned char);
    void set_green(int);
    void set_green(unsigned char);
    void set_blue(int);
    void set_blue(unsigned char);
    // void get_all(rgb&);
    rgb* get_all(rgb*);
    unsigned char get_red();
    unsigned char get_green();
    unsigned char get_blue();
    void invert();
    void rgb2grey();
    void rgb2grey(float, float, float);
    float getvalue();
  private:
    unsigned char r;
    unsigned char g;
    unsigned char b;
    unsigned char round(float);    
};



In der Funktion "floydsteinberg" wird auf eine ihrer Methoden zugegriffen, die die RGB-Werte des jeweils aktuellen pixel-Objekts ausliest und als (Zeiger auf) ein struct-Objekt vom Typ "rgb" zurückgeben soll:


C++:
rgb t0, t1, t2, t3, t4, closest=pal.at(0);
  rgb *triple;
[...]
t0 = *img[r].at(c).get_all(triple);



Genau dieser Aufruf mit Zuweisung führt dazu, dass sich das Programm aufhängt... wieso?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.02.2017, 02:21 Uhr
Yadgar



Hi(gh)!

Das Problem hat sich geklärt - ich übergebe das struct-Objekt jetzt statt per Zeiger per Referenz, da spare ich mir die Rückgabe!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: