[ 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 :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.