Распределение памяти глобальной структуры - PullRequest
1 голос
/ 19 ноября 2010
struct ponto *ps = malloc( sizeof(struct ponto) * colunas * linhas );

Я объявил об этом в main (). Однако я хочу, чтобы он был глобально доступен для всех функций. Я полагаю, что это сделано с помощью realloc и объявления его как нулевого или чего-то еще в начале файла. Это правильно?

struct ponto *ps = null;

и затем, когда я знаю размер, который мне нужен для структуры массивов:

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

Но, похоже, это не работает, хе-хе. Любые советы?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Если ваша проблема на самом деле просто в области действия переменной, вы можете сделать это:

struct ponto *ps = NULL;
...
int main()
{
    ps = malloc( sizeof(struct ponto) * colunas * linhas );
    ...
}
1 голос
/ 19 ноября 2010

Чтобы сделать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...