Feri - izredni študij Seznam forumov Feri - izredni študij
Feri - izredni študij
 
 Pogosta vprašanjaPogosta vprašanja   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   RSS Feed   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Zasebna sporočilaZasebna sporočila   PrijavaPrijava 




malloc, realloc, free !!! NUJNO !!!

 
Objavi novo temo   Odgovori na to temo    Feri - izredni študij Seznam forumov -> Osnove sistemske programske opreme OSPO
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
igor
Administrator foruma


Pridružen/-a: 20.09. 2009, 17:22
Prispevkov: 192

PrispevekObjavljeno: 18 Jan 2010 21:21    Naslov sporočila: malloc, realloc, free !!! NUJNO !!! Odgovori s citatom

Ojla,
kdo mi lahko na primerih razloži, kako se to uporablja??? Sem že obupan!!!

Poskušam tako, pa mi ne dela:
Koda:

   char *odzivLn;
   odzivLn=(char*)malloc(sizeof(char));


potem berem znak po znak in ga dodajam v string pointer, pointer vsakič povečam za 1 byte (char)
Koda:

   while(odzivC!='\n')
   {      
      nread=read(oprimek, &odzivC, 1);
      (char)realloc(odzivLn,size+sizeof(char));
      memcpy(odzivLn,&odzivC,1);
      n++;
   }

nato dodam še eno mesto za zaključek string \0 in še izpišem
(z "n" štejem koliko znakov sem že dobil)
Koda:

   (char)realloc(odzivLn,size+sizeof(char));
   odzivLn[n]='\0';
   printf("-%s\n",odzivLn);


Pa mi ne izpiše nič. S težkimi mukami in metodo "uzaludnih pokušajev" sem uspel vsaj to, da mi ne javlja več segmentation fault.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
MilanG



Pridružen/-a: 16.01. 2010, 13:16
Prispevkov: 12

PrispevekObjavljeno: 20 Jan 2010 07:39    Naslov sporočila: Odgovori s citatom

A das celo kodo, pa da sprobamo?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
jani_k



Pridružen/-a: 21.01. 2010, 17:28
Prispevkov: 8

PrispevekObjavljeno: 21 Jan 2010 17:49    Naslov sporočila: Odgovori s citatom

Tako na hitro, kaj je tisti "size"? Imas to kako spremenljivko, kjer hranis velikost tvojega polja? Ker sicer bi bilo pravilno sizeof(odzivLn)+sizeof(char).

Sicer pa, o tem sem se z asistentoma pogovarjal. Sem rekel, da bi jaz bral znak po znak in vsakic poveceval vmesnik za 1. Sta rekla, da je to potratno in da naj naredim en fiksni vmesnik (naprimer 100) in berem v vecjih kosih naenkrat.

Ne pozabit, da funkcija read vraca koliko je prebrala (v bytih). Kar zna bit koristno.

Edit: aja, probaj za vsak primer namesto s printf izpisat z write(1,&odzivLn, sizeof(odzivLn);
Ce je kaj not bo to sigurno izpisalo. Ce ne mas prazno.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
igor
Administrator foruma


Pridružen/-a: 20.09. 2009, 17:22
Prispevkov: 192

PrispevekObjavljeno: 23 Jan 2010 21:35    Naslov sporočila: Odgovori s citatom

Evo ga, s tem testnim programčkom, ki sem si ga napisal (in v njem testiral) sem končno uspel skapirat.
Tako da če kdo potrebuje, izvolite example za malloc in realloc ter funkcijo, ki vrača string.

Koda:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netdb.h>
#include <stdio.h>
#include <netinet/in.h>
#include <string.h>


char *readline(int oprimek)
{
   int n=0; /* število znakov*/
   int size=0;/* velikost memory bloka*/
   char odzivC;
   char *odzivLn;
   
   odzivLn=malloc(5);
   strcpy(odzivLn,"test");
   printf("V funkciji: %s\n",odzivLn);

   odzivLn=realloc(odzivLn, strlen(odzivLn)+5);
   printf("za realloc:\n");
   strcat(odzivLn,"Test1");
   printf("V funkciji 2: %s\n",odzivLn);

   return odzivLn;

}

int main(int argc,char** argv) {


   printf("%s\n",readline(0));

   char *niz;
   /*niz=malloc(1);*/

   niz=readline(0);
   printf("Izpisemo niz: %s\n",niz);

   return 0;
}
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Feri - izredni študij Seznam forumov -> Osnove sistemske programske opreme OSPO Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu


MojForum.si - brezplačno gostovanje forumov. Powered by phpBB 2.