hallo alle! ich will ein speicher mit unbekannter groesse reservieren.Meine frage gibts bei visual studio c++ 6 eine funktion ,die sowas macht? Vielen Dank im voraus für jede Hilfe. BS:Windows XP mfg
Unbekannte Größe? Äh? Wie stellst du dir das vor? Du kannst Speicher allozieren und dann vergrößern, aber eine unbekannte Größe anfordern? Das widerspricht sich ja schon in der Fragestellung.
Hallo wieder! ich wollte dies Funktion (Marshallsoft benuzen) fceGetList(Channel, Flag, Buffer, BufLen) Channel : (I) Channel number. Flag : (I) Listing type flag Buffer : (P) List buffer. //hier ist mein BufLen : (I) Size of 'Buffer' //mein problem?????? RETURNS Return < 0 : An error has occurred (buffer overflow). Call fceErrorText. Return > 0 : Number of characters copied to 'Buffer'. Ich weiß nicht wie kann ich speicher fuer variable buffer Allozieren,weil ich nicht weiß, wie viel daten werde ich vom Server bekommen? Allozieren und vergrößern hört sich gut an hast du irgen ein Beispiel dafuer? mfg
Nabil wrote: > Ich weiß nicht wie kann ich speicher fuer variable buffer > Allozieren,weil ich nicht weiß, wie viel daten werde ich vom Server > bekommen? Man kann das aber in etwa abschätzen. Dann noch mal, je nach Gemütslage 20% drauf und den call einfach mal machen. Der Server sagt dir dann schon, ob das gereicht hat oder nicht. <Zitat> Return < 0 : An error has occurred (buffer overflow). Call fceErrorText. </Zitat> Wenn der Server mitteilt, dass der Buffer zu klein war, kann man ja den Buffer vergrößern. zb. neue Größe = alte Größe * 2 und den call nochmal machen.
1 | static char* pBuffer; |
2 | |
3 | ....
|
4 | |
5 | BufferSize = DENK_DIR_WAS_AUS; |
6 | pBuffer = malloc( BufferSize ); |
7 | |
8 | do { |
9 | RetValue = fceGetList( Channel, Flag, pBuffer, BufferSize ); |
10 | |
11 | if( RetValue < 0 ) { // Buffer war zu klein |
12 | free( pBuffer ); |
13 | BufferSize *= 2; |
14 | pBuffer = malloc( BufferSize ); |
15 | }
|
16 | } while( RetValue < 0 ); |
17 | |
18 | ....
|
19 | |
20 | free( pBuffer ); |
So ungefähr. Wenn beim ReturnWert von fceGetList noch andere Dinge als Buffer Overflow möglich sind, dann musst du halt die Abfrage nach dem Buffer Overflow verfeinern. Ob du jetzt den Buffer in der Größe immer verdoppelts oder ob du zb. den Buffer in 1 Schritten größer machst, bleibt dir überlassen und hängt auch davon ab über welche Datengrößen wir da reden. Denk dir eine Strategie aus, die für deinen speziellen Fall gute Ergebnisse verspricht. Was auch gut kommt: Das vergrößern sollte nicht der Normalfall sein. Also einfach mal nachsehen wie oft die Vergrößerung in Anspruch genommen wird. Passiert das oft, dann geht man mit der initialien größe DENK_DIR_WAS_AUS größer. Die automatische Vergrößerung sollte sowas wie ein Notfallplan sein, der eher selten zum Zug kommt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.