#c #struct #malloc #global-variables #header-files
#c #структура #malloc #глобальные переменные #заголовочные файлы
Вопрос:
Я пытаюсь манипулировать динамически распределяемым массивом структур, но я не могу получить данные для сохранения при вызовах функций, несмотря на то, что это глобальная переменная. Я использую файл заголовка для объявления глобальной переменной, файл с тем же именем, что и файл заголовка с реализациями функции, и основной файл, который запускает программу. Вот содержимое трех файлов:
things.h:
struct st {
int number;
};
struct st *test;
// Function Declarations
int A();
int B();
things.c:
#include <stdio.h>
#include <stdlib.h>
#include <things.h>
int A() {
// Allocate size for 10 struct st's
test = malloc(10*sizeof(test));
test[5].number = -1;
printf("%dn", test[5].number);
B();
return 0;
}
int B() {
printf("%dn", test[5].number);
return 0;
}
mainFile.c:
#include <stdio.h>
#include <stdlib.h>
#include <things.h>
int main() {
A();
return 0;
}
Не уверен, в чем проблема. Ожидаемый результат:
-1
-1
но результат, который я получаю, является:
`-1`
`some-random-number-here`
Это очень простая копия того, над чем я на самом деле работаю, поэтому не беспокойтесь о динамическом распределении (должно быть динамическим) и проверке, возвращает ли оно сначала NULL.
Редактировать:
Как упоминали @xing и @cdarke, моя проблема была с моим malloc. Теперь работает так, как ожидалось.
Комментарии:
1.
test
является указателем, поэтому10*sizeof(test)
имеет размер 10 указателей, а не 10 структур. Использоватьsizeof(*test)
2. Это действительно была проблема, теперь она работает так, как ожидалось.
3. Я не вижу здесь ошибки. По крайней мере, на моей платформе есть
sizeof(*) > sizeof(int)
. Может быть, вам нужно добавитьfflush
в конце main?