Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dodela memorije pokazivaču unutar strukture, ali....

[es] :: C/C++ programiranje :: Dodela memorije pokazivaču unutar strukture, ali....

[ Pregleda: 1843 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 00:06 - pre 162 meseci
Nisam uspeo ovo do sada da uradim, imam recimo ovakvu situaciju

Code:
typedef struct {
      char *p;
} S;

void f(S **); 

void main() {
   S *ps:

   f(&ps);
}

void f(S **ps) {
*ps=malloc(10*sizeof(S));

 /* ??????? */

}



Kako sad iz te funkcije f dodeliti prostor pokazivaču p nekog člana niza struktura?



Hvala :)
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 02:01 - pre 162 meseci
Pozdrav,

memoriju za char *p alociras sa *ps->p = (char*)malloc(STR_LEN*sizeof(char)) ili posto imas 10 S-ova u nizu:
Code (c):

    for(i=0; i < 10; i++){
        if(((*ps+i)->p = (char*)malloc(STR_LEN*sizeof(char))) == NULL){
            printf("Greska");
        }
    }
 


takodje ne zaboravi i da oslobodis memoriju pri izlazu iz programa.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 07:22 - pre 162 meseci
Hvala, ali to sam već pokušavao i ne može, dobijem samo Segmentation fault.
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.dynamic.sbb.rs.



+1 Profil

icon Re: Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 11:08 - pre 162 meseci
Code (c):


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

typedef struct
{
     char* p;
} S;

void f(S**);

int main()
{
     S* ps;
     f(&ps);
}

void f(S** ps)
{
     int i;

     *ps = malloc(10 * sizeof(S));
         
     for (i = 0; i < 10; i++)
          if (((*ps + i)->p = (char*)malloc(sizeof(S))) == NULL)
               fprintf(stderr, "cannot malloc()");

     for (i = 0; i < 10; i++)
          free((*ps + i)->p);
         
     free(*ps);
 }
 

se meni kompajlira i izvrsava bez problema na VS 2008/Windows 7 i gcc 4.3.3/Linux.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 13:01 - pre 162 meseci
Pozdrav,

pretpostavljam da si ovo dao samo kao primer a ne konkretan kod koji ti pravi problem? Ako nije mozda je najbolje da ostavis delove koda, moguce je da nesto drugo izbacuje segfault.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Dodela memorije pokazivaču unutar strukture, ali....10.12.2010. u 22:00 - pre 162 meseci
Da, to je bio samo primer.
Problem je rešen, bio je ipak u ostatku koda što nisam promenio sve za prelazak na dinamičku dodelu, to sam zaboravio :).
Hvala svima!



Pozdrav :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Dodela memorije pokazivaču unutar strukture, ali....

[ Pregleda: 1843 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.