Toon posts:

[C] functies met pointers (&memory reallocation)

Pagina: 1
Acties:
  • 35 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben nu al te lang bezig om het te laten werken .. maar het lukt me maar niet.
Helpt u mij alstublieft :)

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>

//Reallocate to size, if fails, then free, otherwise copy the string
void realloc_strncpy(void * pMemory, const char * sData)
{
  void * pResult = (void *) NULL;
  size_t sizeLength = (size_t) strlen((const char *) sData)+1;
  //Deze realloc zou in dit geval natuurlijk een malloc moeten zijn,
  //alleen als alles straks een beetje werkt dan realloc ik hier pMemory ipv pResult
  pResult = (void *) realloc((void *) pResult, (size_t) sizeLength);
  if(pResult != (void *) NULL)
  {
    pResult = (void *) strncpy((char *) pResult, (const char *) sData, (size_t) sizeLength);
    pMemory = (void *) pResult;
printf("pMemory -> (geheugen adres): %d\r\n",(void *) pMemory);
printf("pMemory (string): \"%s\"\r\n",pMemory);
  }
  else
  {
    free((void *) pMemory);
    pMemory = (void *) NULL;
  }
}

int main(void)
{
  const char * sTest= "Internal Server Error";
  void * pTestpointer = NULL;
  printf("pTestpointer -> (geheugen adres): %d\r\n",(void *) pTestpointer);
  realloc_strncpy((void *) &pTestpointer, (const char *) sTest);
  printf("pTestpointer -> (geheugen adres): %d\r\n",(void *) pTestpointer);
  printf("pTestpointer -> (string): \"%s\"\r\n", (char *) pTestpointer);
  system("pause.exe");
  return 0;
}


Wat ik hieruit krijg is dit:
code:
1
2
3
4
5
pTestpointer -> (geheugen adres): 0
pMemory -> (geheugen adres): 3280920
pMemory (string): "Internal Server Error"
pTestpointer -> (geheugen adres): 0
pTestpointer -> (string): "(null)"

Verwijderd

Pointer naar een pointer gebruiken:
code:
1
2
3
void realloc_strncpy(void ** pMemory, const char * sData) 
...
    *pMemory = (void *) pResult;


En zo aanroepen:
code:
1
realloc_strncpy((void **) &pTestpointer, (const char *) sTest);

Verwijderd

Topicstarter
Ahh perfect :) ... ik was al te lang bezig met dit pointer probleem :) ..
zeer veel dank joriswit _/-\o_ !

Nu kan ik weer verder waar ik mee bezig was, een Non Parsed Header CGI applicatie in C :)

Dit is nu m'n uiteindelijke versie: (voor search doeleinden)
Misschien moet er nog een 'checkje' op de pResult van strncpy ..
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

//Reallocate to size, if fails, then free, otherwise copy the string
void realloc_strncpy(void ** pMemory, const char * sData)
{
  void * pResult = (void *) NULL;
  size_t sizeLength = (size_t) strlen((const char *) sData)+1;
  pResult = (void *) realloc((void *) *pMemory, (size_t) sizeLength);
  if(pResult != (void *) NULL)
  {
    *pMemory = (void *) pResult;
    pResult = (void *) strncpy((char *) *pMemory, (const char *) sData, (size_t) sizeLength);
    *pMemory = (void *) pResult;
  }
  else
  {
    free((void *) pMemory);
    pMemory = (void *) NULL;
  }
}

int main(int argc, char **argv, char **envp)
{
  const char * sTest= "Internal Server Error";
  void * pTestpointer = NULL;
  printf("pTestpointer(-> (geheugen adres): %d\r\n",(void *) pTestpointer);
  realloc_strncpy((void **) &pTestpointer, (const char *) sTest);
  printf("pTestpointer(-> (geheugen adres): %d\r\n",(void *) pTestpointer);
  printf("pTestpointer: \"%s\"\r\n", (char *) pTestpointer);
  return 0;
}

Verwijderd

Graag gedaan!

Waarschijnlijk kan je nog wel de helft (of misschien wel alle) casts weghalen, is iets mooiere code dan.

Verwijderd

Topicstarter
Jah dat klopt .. maar zoals je ziet is het een systematiek die ik aanhoud .. en dat is om mogelijke 'problemen' te voorkomen, je hebt gelijk .. alleen ik had net een nieuwe 'standaard' gelezen en ik vond het wel een leuk idee .. dus daarom alle (meestal onnodige casts) ...

(Zei iemand die nu net thuis is :) .. heb het nieuwe jaar maar ingedronken :) )

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 01 januari 2004 @ 07:18:
Jah dat klopt .. maar zoals je ziet is het een systematiek die ik aanhoud .. en dat is om mogelijke 'problemen' te voorkomen, je hebt gelijk .. alleen ik had net een nieuwe 'standaard' gelezen en ik vond het wel een leuk idee .. dus daarom alle (meestal onnodige casts) ...

(Zei iemand die nu net thuis is :) .. heb het nieuwe jaar maar ingedronken :) )
Met onnodige casts (en ook code in het algemeen) introduceer je vaker bugs dan dat je ze voorkomt hoor. Zeker met c-style casts.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 31 december 2003 @ 18:37:
Ik ben nu al te lang bezig om het te laten werken .. maar het lukt me maar niet.
Helpt u mij alstublieft :)
sorry, maar met "het lukt me maar niet" kunnen we op zich niets. We gaan natuurlijk niet je code doorspitten op zoek naar de fout (hoewel ik zie dat sommigen dat al gedaan hebben ;)). Je zal toch echt zelf aan moeten geven wat er precies niet lukt, en waarom je denkt dat dat fout gaat. En wat je al geprobeerd hebt om het op te lossen bijvoorbeeld

Dit staat allemaal vermeld in P&W FAQ - De "quickstart"

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.