004
06.12.2006, 15:20 Uhr
0xdeadbeef
Gott (Operator)
|
C++: |
int* Binar(int zahl,int bit) { int b[bit]; // ... p=&b[0]; return p; }
|
Das wird so nichts, nicht mal in C99, wo VLAs erlaubt sind. p zeigt auf eine lokale Variable, die nach Ende der Funktion ungültig wird. Jeder zukünftige Zugriff auf den zurückgegebenen Zeiger geht damit ins Nirvana und erzeugt undefiniertes Verhalten. Es gibt zwei Möglichkeiten, hier vorzugehen - erstens, den Buffer von außen weiterreichen, also
C++: |
int *binary(int zahl, int *b, int bit) { // wobei b bereits auf einen Speicherbereich der Länge bit zeigt // ...
return b; }
|
oder den Kram auf den Heap legen:
C++: |
int *binary(int zahl, int bit) { int *b = (int*) malloc(sizeof(int) * bit);
// ...
return b; }
// ...
int *bin = binary(20, 8);
// ...
free(bin); // Das hier nicht vergessen, sonst gibts Speicherlecks
|
In C++ halt statt malloc und free new und delete[] benutzen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 06.12.2006 um 15:20 Uhr von 0xdeadbeef editiert. |