Struktury-jazyk C-problém s alokací...

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Struktury-jazyk C-problém s alokací...

Příspěvek od Václav Sedlář »

Dobrý den, s kmošem řešíme v cěčku jeden problém-zkrátím to a dám jsem jen to hlavní

máme textový soubor, který obsahuje toto (čísla narychlo vymyšlená...1.sloupec je ID, druhý je rodič a třetí je obsah):

Kód: Vybrat vše

1 0 1
2 1 2
3 1 1
4 1 3
5 2 4

a v céčku máme zapsanou strukturu (dám jsem jen to hlavní):

Kód: Vybrat vše

#include "stdafx.h"
#include "stdlib.h"

int velikost=0;

typedef struct {
   //definice datove struktury
   int id;
   int rodic;
   int obsah;
} Prvek;

Prvek* alokuj_pole(){
   return (Prvek *) malloc(velikost * sizeof (int));
}

Prvek* napln_strom(Prvek* s){
   FILE *fr;
   fr = fopen("strom.txt", "r");
   int i,id,rodic,obsah;

   for (i = 0; i < velikost; i++) {
       fscanf(fr, "%d %d %d\n", &id, &rodic, &obsah);
       s[i].id = id;
       s[i].rodic = rodic;
       s[i].obsah = obsah;
   }
   
   return s;
}

void vypis_strom(Prvek* s) {
   //funkce rekurzivne vypise v graficke podobe cely strom    
   int i;
   for (i = 0; i < velikost; i++) {
       printf("%d %d [%d] \n", s[i].id, s[i].rodic, s[i].obsah);
   }
}

void zapis_do_souboru(Prvek *s){
   FILE *fw;
   int i;
   fw = fopen("strom.txt", "w");
   for(i=0;i<velikost;i++){
       fprintf(fw, "%d %d %d\n", s[i].id, s[i].rodic, s[i].obsah);
   }
   fclose(fw);
}

int _tmain(int argc, _TCHAR* argv[])
{
Prvek *strom;
velikost=zjisti_velikost_ze_souboru();
   strom=alokuj_pole();
   strom=napln_strom(strom);
   vypis_strom(strom);
return0;
}
A teď tu mám problém, který řeším už dva dny a nic...Potřebuju udělat funkci , která přídá do struktury další prvek (=ddalší řádek s id, rodicem a obsahem) a nejde to...a k tomu bych to potřeboval, aby to při přidávání prvku už nepotřebovalo číst ze souboru txt...

Měl jsem nápad, a to takový že si to co mám do teď v poli struktury(tedy v poli strom) dal do nějakého dočasného pomocného pole int a pak nějak znovu vytvořil se zvětčenou velikostí to pole strktur (pole strom)...vše funguje do doby než začnu z pomocného pole vše načítat zpět do nově vytvořeného pole strom...nezapíšu tam nic-visual studio mě okamžite vykopne s chybou...pravděpodobně zapisuju někam kam nemám...

Otázka tedy zní-jak smazat Prvek* strom a zase udělat strom=(Prvek *) malloc(zvetšená_velikost * sizeof (int));

Budu vděčný za každou radu- na tomhle jsem se zasek a dál nemůžem postupovat...včera jsem málem vyhodil noťase z vokna :angry2:
Trek
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. kvě 2008

Re: Struktury-jazyk C-problém s alokací...

Příspěvek od Trek »

lze použít realloc nebo znovu vytvořit pole a nakopírovat do položky a další hodnotu (alokovat pole po větších kusech dopředu) nebo lineární spojový seznam
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: Struktury-jazyk C-problém s alokací...

Příspěvek od Václav Sedlář »

tady je problém-rozchodil jsem už free(strom) (měl jsem blbě napsanou alokaci), ale nefunguje nová alokace-alokace ještě projde, ale do toho nově alokovaného stromu nic nezapíšu (Ani první prvek)...co s tím...
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: Struktury-jazyk C-problém s alokací...

Příspěvek od Václav Sedlář »

už to jde-mallocem to nejde, ale reallocem jo
hotovo vyřešeno!
Odpovědět

Zpět na „Programování a web“