Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[C] speicher allokieren [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[C] speicher allokieren


 
Peter_Panther
05-07-2007, 14:27 
 
Hallo Gemeinde,

ich moechte eine Funktion aufrufen (aus main) die Speicher allokiert.
Wie ihr seht, hat diese Funktion zwei Parameter
1. int - Groesse des zu allokierenden Speichers
2. typenlosen pointer

In main() soll dann ein byte allokiert werden und mit einem charakter befuellt werden. Meiner Meinung nach tut es das auch, oder? ;-)
Die Ausgabe klappt zumindest soweit.

Wie kann ich denn den Wert des Pointers in main() nochmal ausgeben?!

Achso, der Code:


#include <stdio.h>
#include <stdlib.h>

int allokiere(int laenge, void *zeiger) {

zeiger = (void *)malloc(laenge);
if( zeiger != NULL) {
printf("Allozierung war erfolgreich\n");
char *zeiger = "f";
printf("%s\n", zeiger);
} else {
printf("Aetsch, hier ging was schief\n");
}

return 0;
}

void main() {

void *Name;
allokiere(1, Name);

getchar();
}

 
penizillin
05-07-2007, 19:37 
 
einer Meinung nach tut es das auch, oder? nein.

um den inhalt von "Name" (übrigens - kleinschreiben) zu verändern, muss die funktion void **zeiger als parameter erwarten. der aufruf muss entsprechend mittels &name erfolgen. und für eine stringzuweisung würde ich immer noch strcpy(*zeiger, "foo"); nehmen.

die ausgabe dann wie gewohnt mit printf("%s\n", (char*)name);

p.s. free() nicht vergessen.

p.p.s. es heißt "int main()", nicht void.

 
Peter_Panther
05-07-2007, 20:53 
 
Danke, habe es so gemacht:


int allokiere(int laenge, void **zeiger)
{
*zeiger = (void *)malloc(laenge);
if( zeiger != NULL)
{
printf("Allozierung war erfolgreich\n");
*zeiger = (void*)("f");
printf("%s\n", (char*)(*zeiger));
}
else
{
printf("Aetsch, hier ging was schief\n");
}
return 0;
}

int main()
{

void *Name;
allokiere(1, &Name);
printf("%s", Name);

return 0;
}


Okay, speicherfreigabe muss ich noch einbauen.
Ansonsten, int oder void bei main? Kann man halten wie man will, oder?

 
penizillin
06-07-2007, 04:16 
 
if( *zeiger != NULL) benutze statt *zeiger = (void*)("f"); lieber strcpy.

Ansonsten, int oder void bei main? Kann man halten wie man will, oder? nein. http://www.it-academy.cc/article/1446/ANSI+C99+Grundlagen.html#1.2.Das%20Hauptprogramm|outline

 
Peter_Panther
06-07-2007, 07:53 
 
Sehr gut. Danke!


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:20 Uhr.