Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Free memory

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
07.05.2005, 23:29 Uhr
~Florian
Gast



Zitat:
hätte mich auch gewundert wenn nicht


Naja, die VC IDE unter Windows ist aus meiner Sicht angenehmer als KDevelop, zumindest unter C++ mit den Klassen Overviews etc.


Zitat:
Tja Windows


Werde das Gefühl nicht los, das du Windows nicht besonders gern hast . Hast du vielleicht dennoch eine Idee warum das obige Beispiel mit free(v); nicht funktioniert, oder nen anderen Lösungsansatz.


Zitat:
zeig den code, evtl nen c-style cast benutzt?



C++:
void Sort(char **arr)
{
    qsort(arr, MAX, sizeof(arr), cmp);
}

int cmp(const char **p1, const char **p2)
{
    return strcmp(*p1, *p2);
}



BTW: Das Forum ist spitze! Werde euch nun wohl öfters mit meinen nervenden Fragen belästigen...

Gruß
flo

Dieser Post wurde am 07.05.2005 um 23:44 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
07.05.2005, 23:56 Uhr
~Florian
Gast


OK, nach einigen Google Runden habe ich nun herausgefunden warum im Debug Build dieser Fehler (debug assertion failed expression: _CrtIsValidHeapPointer(pUserData)) erscheint. Es scheint sich um ein Library Linker Problem zu handeln bei welchem zwei Heaps erzeugt werden. Dann kommt es zu einem Speicher Problem. Da der Release Build keine Probleme macht und das Programm ansonsten einwandfrei ausgeführt wird, mache ich mir nun keine Gedanken mehr darüber.

Meine Frage zu qsort() bleibt aber bestehen

Gruß
flo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
08.05.2005, 02:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


beantwortet das hier deine frage oder was genau meinst du?

C++:
int mycmp(const void *p, const void *q){return strcmp(*(const char**)p,*(const char**)q);}

int main(){

    int i;
    char *x[6]={"Hallo","tralalalalala","GMX","tralala","Weihnachtsmann","Linux sucks"};

    for(i=0;i<6;++i)
        printf("%s\t",x[i]);
    putchar('\n');

    qsort(x,6,sizeof(char*),mycmp);

    for(i=0;i<6;++i)
        printf("%s\t",x[i]);
    putchar('\n');
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
08.05.2005, 10:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von ~Florian:


Zitat:
Tja Windows


Werde das Gefühl nicht los, das du Windows nicht besonders gern hast . Hast du vielleicht dennoch eine Idee warum das obige Beispiel mit free(v); nicht funktioniert, oder nen anderen Lösungsansatz.


naja es hat sich immerhin gebessert, ich benutz es selbst auch hauptsächlich, da im Grunde die Winoberfläche wirklich gut ist (bis auf die "paar" Fehler halt). Von der Stabilität her kann Windows aber eben nicht mit Linux mithalten. Das läuft nun seit knapp 3 Jahren ohne Neuinstallation, nur ab und zu ein Neustart, meist hardwarebedingt (scheiss scsi-platten )
Unter Windows hatte ich in der Zeit ungezählte Neuinstallationen, auch wenn das mit WinXP von 6 Wochen auf ca 6 Monate verschoben hat.


Zitat von ~Florian:


C++:
void Sort(char **arr)
{
    qsort(arr, MAX, sizeof(arr), cmp);
}

int cmp(const char **p1, const char **p2)
{
    return strcmp(*p1, *p2);
}




wie Windalf schon sagte, die Compare-Funktion hat 2 void-Pointer, deshalb meldet er die Warnung
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
08.05.2005, 11:50 Uhr
0xdeadbeef
Gott
(Operator)


Windalf: Du solltest echt auf const-correctness achten. So dürfte der Compiler ne weitere Warnung schmeißen, dass du nen cv-qualifier wegschmeißt. Richtig wärs so:

C++:
int mycmp(void const*p, void const *q){
  return strcmp(*(char const *const *)p,*(char const *const*)q);
}


oder so:

C++:
int cmp(char const *const *p1, char const *const *p2)
{
    return strcmp(*p1, *p2);
}

void Sort(char **arr)
{
    qsort(arr, MAX, sizeof(arr), (int (*)(void const*, void const *)) cmp);
}


...wobei ich erstere Lösung bevorzuge.

Oh, und ganz nebenbei: Sowas wie das hier:

C++:
    char *x[6]={"Hallo","tralalalalala","GMX","tralala","Weihnachtsmann","Linux sucks"};


will ich auch nie wieder sehen. Das heißt

C++:
    char const *x[6]={"Hallo","tralalalalala","GMX","tralala","Weihnachtsmann","Linux rules and Windoze sucks"};


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.05.2005 um 11:53 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
08.05.2005, 13:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Windalf: Du solltest echt auf const-correctness achten


Who cares about const?


Zitat:

Oh, und ganz nebenbei: Sowas wie das hier:


C++:
char *x[6]={"Hallo","tralalalalala","GMX","tralala","Weihnachtsmann","Linux sucks"};



will ich auch nie wieder sehen. Das heißt


C++:
    char const *x[6]={"Hallo","tralalalalala","GMX","tralala","Weihnachtsmann","Linux rules and Windoze sucks"};




erstaunlich wie dich eine völlig zufällig gewählte Buchstabenfolge nerven kann
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
08.05.2005, 16:14 Uhr
~Florian
Gast


Super, vielen Dank an euch drei! Nun meckert auch der GCC nicht mehr beim Make. Das mit den beiden void Pointern hatte ich mir in dieser Richtung zumindest schon gedacht als ich mir die qsort() Deklaration im Netz näher angeschaut habe. Unser Prof-Assistent konnte mir damals den Grund dafür auch nicht verraten . Naja egal, wie gesagt super Forum - macht weiter so!

Gruß
flo
 
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: