2010-11-19 5 views
0
struct ponto *ps = malloc(sizeof(struct ponto) * colunas * linhas); 

내 main()에 선언했습니다. 그러나 전 세계 모든 기능에 액세스 할 수 있기를 바랍니다. 나는 이것이 realloc으로 만들어졌고 이것을 파일의 시작 부분에 null이나 뭔가로 선언한다고 생각한다. 이 올바른지?글로벌 구조의 메모리 할당

struct ponto *ps = null; 

후, 나는 배열의 구조체에 필요한 크기를 알고 자 할 때 :

ps = realloc (ps, sizeof(struct ponto) * colunas * linhas); 

을하지만이 도니는 다르게 작동하지 않습니다. 어떤 팁?

+0

어떻게 그것이 작동하지 않는 것을 알게 되었습니까? null에서'realloc'을 호출하는 것은'malloc'과 같습니다. – khachik

+0

예치 그 사실을 깨달았습니다. – Qosmo

답변

1

ps을 전역으로 표시하려면 전역 변수 여야합니다. 아마도 열과 행의 수에 대해서도이 작업을 수행해야합니다.

struct ponto *ps; 
int colunas, linhas; 

int main() 
{ 
    colunas = /* whatever */; 
    linhas = /* whatever */; 
    ps = malloc(sizeof(struct ponto) * colunas * linhas); 
    /* do other stuff */ 
} 

지금 ps 소스 파일과 그것을 통해 모든 기능에 볼 수 있습니다, 그들은 그것이 가리키는 메모리에 액세스 할 수 있습니다. 여러 소스 파일이있는 경우

, 당신은 그것으로 버퍼를 ps 점의 크기를 조정, 그것은

struct ponto { /* whatever */ }; /* define the struct in the header */ 
extern struct ponto *ps; 
extern int colunas, linhas; 

realloc는 완전히 다른 작업을 수행 선언하는 헤더 파일에 대한 ps 얘기해야합니다. null 문제가 정말 변수의 단지 범위 인 경우 표준 C.

+0

struct ponto * ps를 선언 할 때 "선언 지정자에 두 개 이상의 데이터 유형"; 왜 이런거야? – Qosmo

+0

@Queops,'struct ponto' 선언 다음에 세미콜론 (';')을 넣었습니까? http://stackoverflow.com/questions/2098973/two-or-more-data-types-in-declaration-specifiers-error –

+0

제 말은 * type *'struct의 선언 뒤에';'를 포함 시켰습니까? 폰토? (변수'ps'가 아닙니다.) –

1

에 존재하지 않는,이 작업을 수행 할 수 있습니다

struct ponto *ps = NULL; 
... 
int main() 
{ 
    ps = malloc(sizeof(struct ponto) * colunas * linhas); 
    ... 
} 
+0

명시 적 'NULL'은 필요하지 않습니다. –

+0

또한'sizeof * ps'는'sizeof (struct ponto)'보다 더 좋을 것입니다. –