[ enaB @ 10.12.2010. 00:06 ] @
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 :)
[ pajaja @ 10.12.2010. 02:01 ] @
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.
[ enaB @ 10.12.2010. 07:22 ] @
Hvala, ali to sam već pokušavao i ne može, dobijem samo Segmentation fault.
[ karas @ 10.12.2010. 11:08 ] @
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.
[ pajaja @ 10.12.2010. 13:01 ] @
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.
[ enaB @ 10.12.2010. 22:00 ] @
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 :)