Неожиданный вывод для глобального массива структур в C

#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?