Verwijderd schreef op 07 mei 2003 @ 17:37:
Is het ook mogelijk om een string als return waarde te geven bij een functie?
want overal zie ik alleen maar integers die worden teruggegeven..
Maar eigenlijk wil ik een functie die zo werkt:
char s[10];
s = functie();
Kan dat?
Het zal best compilen, maar volgens mij kom je nu aardig in de knoop met je geheugen.
Je maakt ruimte voor 10 chars, de pointer naar dat stukje geheugen noem je s. Vervolgens wijs je aan s een andere waarde toe (whatever die functie berekent). Aan die ruimte voor 10 chars heb je nu dus niks meer (de functie zal zelf geheugen alloceren en een pointer daarnaartoe teruggeven, je 10 bytes heb je dus voor noppes gealloceerd en ben je kwijt), al zal die denk ik nog wel opgeruimd worden zodra s out of scope gaat (zo niet dan heb je nog een memory leak ook). Twee methodes:
C:
1
2
3
4
5
6
| char *s;
s = functie();
...
// doe iets met s
...
free(s); |
Hierbij laat je de functie geheugen alloceren, dat je later zelf weer vrij geeft.
C:
1
2
3
4
| char s[10];
functie(s, 10);
...
// doe iets met s |
Hierbij alloceer je zelf geheugen, en geeft een pointer naar dat geheugen mee aan de functie, die er voor jou wat inzet. Om ervoor te zorgen dat de functie niet teveel kopieert naar dat stukje geheugen (buffer overflow), geef je ook de grootte mee. De Windows API maakt vaak van deze methode gebruik.
of om een pointer te retourneren naar een stuk statisch geheugen.
Dat kan in bepaalde gevallen wel, maar ik raad het je wel af; het zorgt namelijk al gauw voor side effects (bv als je een aanroep naar zo'n functie twee keer doet als argument voor een andere functie) en is niet bepaald thread-safe te noemen
[
Voor 18% gewijzigd door
johnwoo op 07-05-2003 18:16
]