Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template-Problem

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 ] > 2 <
010
28.02.2005, 21:19 Uhr
0xdeadbeef
Gott
(Operator)


OK, ich hab mal ein Codebeispiel gebaut, das, wenn du recht hättest, einen Fehler erzeugen müsste, es aber nicht tut:

C++:
template<typename t> void foo(t *bar) {

}

struct baz {
  int i;
};

struct qux {
  int a[10];
};

int main() {
  baz quux[10];
  qux quuux[10];

  foo(quux);
  foo(quuux);
}


Lass das mal bei dir durchlaufen, ob es auch einen Fehler erzeugt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 28.02.2005 um 21:19 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
28.02.2005, 21:28 Uhr
~sqrt(-1)
Gast


WOW!

Folgendes:


C++:
struct _AElement
{
  short Element;
}*APointer;

struct _BElement
{
  float Element[3];
}*BPointer;

APointer = (_AElement*)VoidPointer;
LogArray(APointer, 45, 102);              // Alles Okay!

BPointer = (_BElement*)VoidPointer;
LogArray(BPointer, 55, 400);              // Absturz!

template <class ElementType> DWORD LogArray(ElementType* ArrayPointer, int ArrayStride, int ArraySize)
{
   LOGG("In der Template-Funktion");
  
   struct _LoggedArrays
   {
    void* ArrayPointer;
    DWORD FilePos;
   }LoggedArrays[1000];

   ElementType ArrayBuffer[100000];

   for(int i=0; i < 100000; i++)
   {
    if(LoggedArrays[i].ArrayPointer == ArrayPointer) return LoggedArrays[i].FilePos;
    if(LoggedArrays[i].ArrayPointer == 0)
        {
           LoggedArrays[i].ArrayPointer = FilePointer;
           ...
        }
    }
    ...  
}



Wenn das Array "ArrayBuffer" 100000 Elemente hat, fliege ich irgendwann einfach so raus - nicht einmal die LOGG("...")-Ausgabe wird geliefer!
Die Parameter sind immer Okay!

Reduziere ich die Array-Größe von ArrayBuffer auf eine kleinere Zahl (z.B. 100), gibt es keine Probleme!


ElementType ist nie größer als 12 Byte!
Was zum Teufel ist da los?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
28.02.2005, 21:56 Uhr
0xdeadbeef
Gott
(Operator)


Hm. Vielleicht ist dein Stack zu klein oder so. Btw, ich würd an deiner Stelle eh STL-Container a la std::vector benutzen anstatt arrays.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
28.02.2005, 22:13 Uhr
~sqrt(-1)
Gast


Wird der Stackrahmen vom VS .Net 2004 Compiler nicht automatisch angepasst?
Bzw. wo kann man den da verstellen?

Der ArrayBuffer wird doch nicht lange gebraucht und ist bei 100.000 Elementen höchsten 1,2MB groß, da ElementType nicht größer als 12byte ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
28.02.2005, 22:15 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab keine Ahnung, wie das unter Windows oder Visual Studio läuft - ich benutz Linux.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: