memalign
-
Ich brauche einen Speicherbereich, der auf eine gewisse Groesse aligned ist. Dafuer moechte ich memalign brauchen doch es klappt nicht.
Warum ergibt (das ist nur irgend ein Beispiel)
int main(void) { char* c = memalign(64, 100 * sizeof(char)); }
die Warnung
warning: initialization makes pointer from integer without a cast [enabled by default]
und
int main(void) { char c = memalign(64, 100 * sizeof(char)); }
ergibt keine Warung.
Ich arbeite mit dem GCC Compiler.
-
Du hast keinen Speicher für deinen Pointer reserviert.
memalign gilt als obsolete. posix_memalign wird empfohlen.
-
stdlib.h nicht eingebunden. Sehr vorbildlich, dass du nicht der Seuche anheim gefallen bist, das Ergebnis zu casten
. So konnte der Compiler den Fehler bemerken, anstatt dass das Programm zur Laufzeit geheimnisvoll abzustürzt.
P.S.: sizeof(char) ist per Definition immer 1.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
@gigg
Deinen ersten Satz verstehe ich nicht ganz.
Ich verwende dann mal posix_memalign.@SeppJ
stdlib.h habe ich eingebunden. Lustigerweise gibt auchchar *c = (char*)memalign(64, 100 * sizeof(char));
dieselbe Warnung.
-
icarus2 schrieb:
@gigg
Deinen ersten Satz verstehe ich nicht ganz.
Ich verwende dann mal posix_memalign.War auch falsch. Sorry. memalign soll ja den Speicher allozieren. Ich hab mich vertan.
Verstehe allerdings auch nicht, was an deinem Aufruf verkehrt ist.
-
Habe gerade gesehen auf der Manpage, dass für memalign der richtige Header malloc.h ist.
posix_memalign braucht stdlib.h.
-
Jap, wenn ich malloc.h einbinde gibts keine Warnungen mehr.
Danke!
-
sizeof(char)
ist immer 1. Brauchst du nicht explizit hinschreiben.
-
rüdiger schrieb:
sizeof(char)
ist immer 1. Brauchst du nicht explizit hinschreiben.Ja, das war drin weil ich es mit unterschiedlichen Datentypen versucht hatte (und dann habs ichs fuer char vergessen rauszunehmen). Troztdem Danke fuer den Hinweis.
-
rüdiger schrieb:
Brauchst du nicht explizit hinschreiben.
Ich würde es trotzdem hinschreiben. Lässt sich imho leichter lesen: "100 chars allozieren". Stehen lassen schadet ja nicht, finde aber man sieht direkt von was man 100 Stück haben will. Zudem wird in diesem Fall auch der Code dokumentiert, da man so sieht, wofür der zweite Parameter da ist.