Seite 1 von 3
Array auf 0 setzen
Verfasst: Do Dez 25, 2008 12:16 pm
von cloidnerux
Ich hab folgendes Problem:
Ich hab ein array der form:
und muss jedes element auf 0 Setzen.
Momentan mach ich das noch so:
Code: Alles auswählen
for(int a=0; a<1024;a++)
{
for(int i=0; i<1024; i++)
{
i_array[a][i]
}
}
Gibts da ne einfachere möglichkeit alle elemente auf 0 zu setzen?
irgendwas mit memset?
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 2:09 pm
von Xin
cloidnerux hat geschrieben:Ich hab folgendes Problem:
Ich hab ein array der form:
und muss jedes element auf 0 Setzen.
Momentan mach ich das noch so:
Ich hoffe der Code ist im Oriignal besser eingerückt.
cloidnerux hat geschrieben:Gibts da ne einfachere möglichkeit alle elemente auf 0 zu setzen?
irgendwas mit memset?
Mit Memset kannst Du ein Array initialisieren.
Du hast aber ein Array von Zeigern auf Arrays, was bedeutet, dass Du memset 1024 mal aufrufen musst.
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 2:27 pm
von cloidnerux
Ich hoffe der Code ist im Oriignal besser eingerückt.
Ja ist besser eingerückt.
dass Du memset 1024 mal aufrufen musst.
das heißt sowas hier:
Code: Alles auswählen
for(int i=0; i<1024; i++)
{
memset(&i_array[i], 0, sizeof(unsigned int)*1024);
}
?
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 7:29 pm
von Kerli
cloidnerux hat geschrieben:Ich hab folgendes Problem:
Ich hab ein array der form:
und muss jedes element auf 0 Setzen.
Xin hat geschrieben:Mit Memset kannst Du ein Array initialisieren.
Du hast aber ein Array von Zeigern auf Arrays, was bedeutet, dass Du memset 1024 mal aufrufen musst.
@Xin: Wie kommst du darauf, dass es ein Array von Zeigern auf Arrays ist? Das ist doch ein simples mehrdimensionales Array.
Da in einem mehrdimensionalen Array genauso wie in einem eindimensionalen Array alle Elemente im Speicher hintereinander liegen, kann man auch mit einem einzigen 'memset' alles auf null setzen:
Code: Alles auswählen
int i_array[1024][1024];
memset( i_array, 0, 1024 * 1024 * sizeof(int) );
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 7:47 pm
von cloidnerux
aha, danke.
geht das auch iwi mit Pointern?
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 7:50 pm
von Kerli
cloidnerux hat geschrieben:aha, danke.
geht das auch iwi mit Pointern?
Wie meinst du das genau? Was für Pointer? 'i_array' ist in dem Codebeispiel auch ein Zeiger auf das erste Element...
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 8:02 pm
von cloidnerux
Sry,
ich meinte so:
Code: Alles auswählen
int *int_pointer;
int length; //Die länge des pointers
memset(int_pointer, 0, length* sizeof(int);
so meinte ich das.
Re: Array auf 0 setzen
Verfasst: Do Dez 25, 2008 8:16 pm
von Kerli
cloidnerux hat geschrieben:geht das auch iwi mit Pointern?
cloidnerux hat geschrieben:Sry,
ich meinte so:
Code: Alles auswählen
int *int_pointer;
int length; //Die länge des pointers
memset(int_pointer, 0, length* sizeof(int);
so meinte ich das.
Wenn sich an der Stelle auf die der Zeiger zeigt ein Block mit der Größe con mindestens 'length* sizeof(int)' befindet dann geht es. Der Zeiger muss also entweder auf das erste Element eines Arrays zeigen, auf ein mit 'new' angefordertes (mehrdimensionales) Array oder auf einen mit 'malloc' angeforderten Speicherblock.
Sollte der Speicher jedoch nicht dir gehören, dann kann das zu teilweise schwer lokalisierbaren Fehlern führen, wie zb einen Segmentation Fault oä.
Re: Array auf 0 setzen
Verfasst: Fr Dez 26, 2008 1:38 am
von Xin
Kerli hat geschrieben:Xin hat geschrieben:Mit Memset kannst Du ein Array initialisieren.
Du hast aber ein Array von Zeigern auf Arrays, was bedeutet, dass Du memset 1024 mal aufrufen musst.
@Xin: Wie kommst du darauf, dass es ein Array von Zeigern auf Arrays ist? Das ist doch ein simples mehrdimensionales Array.
Nobody's perfect... ^^
Hab's gelesen, aber halt falsch gedacht.
Re: Array auf 0 setzen
Verfasst: Fr Dez 26, 2008 10:59 am
von cloidnerux
Ja, da ist ja mein Problem.
Ich habe für die Speicherverwaltung von Aeris einen Pointer, der am ende vom Kernel genutzten speicher liegt.
Damit jezt aber keine fehler auftreten, weil irgendwo da wo mein pointer ist eine wert ist, muss ich alles auf 0 setzten.
Doch weder mit einer for-schleife oder malloc geht das,
ich bekomme immer nur eine Exeption und das System wird eingefroren.
Desswegen muss ich wisse, ob es überhaupt möglich ist, bei einem Pointer alles auf 0 zu setzten.