Array auf 0 setzen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Array auf 0 setzen

Beitrag von cloidnerux » Do Dez 25, 2008 12:16 pm

Ich hab folgendes Problem:
Ich hab ein array der form:

Code: Alles auswählen

int i_array[1024][1024]
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?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Array auf 0 setzen

Beitrag von Xin » Do Dez 25, 2008 2:09 pm

cloidnerux hat geschrieben:Ich hab folgendes Problem:
Ich hab ein array der form:

Code: Alles auswählen

int i_array[1024][1024]
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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Array auf 0 setzen

Beitrag von cloidnerux » Do Dez 25, 2008 2:27 pm

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);
   }
?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Array auf 0 setzen

Beitrag von Kerli » Do Dez 25, 2008 7:29 pm

cloidnerux hat geschrieben:Ich hab folgendes Problem:
Ich hab ein array der form:

Code: Alles auswählen

int i_array[1024][1024]
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) );
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Array auf 0 setzen

Beitrag von cloidnerux » Do Dez 25, 2008 7:47 pm

aha, danke.
geht das auch iwi mit Pointern?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Array auf 0 setzen

Beitrag von Kerli » Do Dez 25, 2008 7:50 pm

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...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Array auf 0 setzen

Beitrag von cloidnerux » Do Dez 25, 2008 8:02 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Array auf 0 setzen

Beitrag von Kerli » Do Dez 25, 2008 8:16 pm

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ä.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Array auf 0 setzen

Beitrag von Xin » Fr Dez 26, 2008 1:38 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Array auf 0 setzen

Beitrag von cloidnerux » Fr Dez 26, 2008 10:59 am

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten