Pereiti prie turinio

C programa - struct dynamic array realloc


Rekomenduojami pranešimai

Sveiki,

 

Naujas esu C programavime. Bandau parašyti struct'ą, kuriame būtų dinamiškas mąsyvas, kuriame laikomi pointeriai į kitus struct'us. Jeigu duodu daug atminties su malloc kai instancijuojų struct'ą, viskas veikia. Tačiau jeigu duodu tik kiek reikia vietos, ir tuomet bandau pridėti (kad ir pridedu 1000000 baitų, kurių užtenka jeigu prided su malloc) su realloc, programa crash'ina. Kame bėda?

 

Kodas (apkirptas):

 

struct Station {
   char name[100];
};

struct StationContainer {
   int numberOfStations;
   struct Station *stations[];
};

struct StationContainer *makeContainer() {
   struct StationContainer *new;
   //*** Jeigu čia į malloc pridedu +1000000 tuomet programa veikia normaliai
   new = (struct StationContainer *) malloc(sizeof(struct StationContainer));

   if (new == NULL) {
       fprintf(stderr, "makeContainer: out of memory\n");
       exit(1);
   }

   return new;
}

int main(int argc, int argv[]) {

   // Initialize the container
   struct StationContainer *container;
   container = makeContainer();

   // Add new station to container
   struct Station *new;
   new = (struct Station *) malloc(sizeof(struct Station));

   if (new == NULL) {
       fprintf(stderr, "makeStation: out of memory\n");
       exit(1);
   }

   strcpy(new->name, name);

   // Add to the container
   // *** Čia nors ir pridedu +1000000 vistiek programa crash'ina kai apačioje bandau pridėti naują stotį
   container = (struct StationContainer *) realloc(container, sizeof(struct StationContainer) + 1000000);

   if (container == NULL) {
       fprintf(stderr, "makeStation: container out of memory\n");
       exit(1);
   }

   container->stations[container->numberOfStations] = new;
   container->numberOfStations++;


}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...