Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Probleme mit Zeiger 2

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.04.2008, 16:07 Uhr
KFC Embryo
Ein Huhn


Hallo,

jetzt habe ich ein weiteres Problem:


Code:

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

int* GetIntArray5 (void)
{
   int arr[5], i;
  
   for (i=0; i < 5; i++)
      arr[i] = 0;
  
   return arr;
}

void main ( void )
{
   int *p;
   int i;

   p = GetIntArray5();

   for(i=0; i <5; i++)
   printf("%d\n", p[i]);
}



Es sollen alle 5 Felder mit 0 initialisiert werden er tut dies aber lediglich bei dem ersten.

Ich seh den Fehler net, kann es sein das ich noch irgendwo was "casten" muss?
Danke.

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.04.2008, 16:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das das nicht abschmiert ist auch nur zufall.

du gibst die adresse einer lokalen variable zurück!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.04.2008, 16:31 Uhr
KFC Embryo
Ein Huhn


mh.... und was muss anstelle dieser Variable zurück geben?
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.04.2008, 16:40 Uhr
Tommix



Hallo,
zieh Dir mal das rein:
www.fun-soft.de/showtopic.php?threadid=1958

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.04.2008, 16:50 Uhr
Hans
Library Walker
(Operator)


Hi,

so wie Du das vor hast, ist das ein Fall für malloc & Co. - damit kannst Du Zeiger auf Speicherbereiche bekommen, die frei und nach dem beenden der Funktion noch da sind.

Also z.B. so:

C++:
int* GetIntArray5 (void)
{
   int i, *arr;
  
   arr = (int *)malloc(5*sizeof(int));

   for (i=0; i < 5; i++)
      arr[i] = 0;
  
   return arr;
}



oder ruf gleich calloc auf, das initialsiert Dir den Speicher schon mit Null.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.04.2008, 16:53 Uhr
öni



ich bin mir nicht sicher aber evtl. erst ein Zeiger übergeben und in diesen dann reinschreiben, denn soviel ich weiß müssten doch die Variablen nur innerhalb der Methode bekannt sein, denn du deklarierst ja auch 2mal i.

Edit: war nicht nur zu langsam sondern die anderen auch noch besser ^^.

Dieser Post wurde am 16.04.2008 um 16:54 Uhr von öni editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.04.2008, 17:13 Uhr
KFC Embryo
Ein Huhn


Cool danke jetzt gehts.

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.04.2008, 17:17 Uhr
0xdeadbeef
Gott
(Operator)


Die üblichste Methode in C ist, den Buffer von außen zu übergeben, samt Längenangabe. In diesem Fall zum Beispiel

C++:
#include <stddef.h> /* size_t */
#include <stdio.h>
#include <string.h> /* memset */

int *zero_array(int *p, size_t len) {
  return memset(p, 0, len * sizeof(int));
}

int main(void) {
  int buffer[5];
  size_t i;

  zero_array(buffer, 5);

  for(i = 0; i < 5; ++i) {
    printf("%d\n", buffer[i]);
  }

  return 0;
}


...wobei sich in diesem speziellen Fall anböte, memset direkt zu verwenden. Wenn's dynamisch sein soll, muss der Speicher nachher von Hand freigegeben werden, das versucht man nach Möglichkeit eigentlich zu vermeiden - gerade Anfänger vergessen das gerne und handeln sich auf die Art Speicherlecks ein, die u.U. recht schwer zu finden sein können - insbesondere, wenn der Speicher an anderer Stelle freigegeben als angefordert wird. Prinzipiell ginge das dann so:

C++:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int *p = calloc(5, sizeof(int));
  size_t i;
  
  for(i = 0; i < 5; ++i) {
    printf("%d\n", p[i]);
  }

  free(p); /* Nicht vergessen! */

  return 0;
}



Nachtrag: Oh, und im übrigen, main ist immer int!
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.04.2008 um 17:18 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: