Réponse acceptée !
Puisque extern sert à utiliser une variable déjà allouée dans un module,
Il suffit d'externaliser la structure dans son propre header et de faire une fonction get qui la renvoi, et tous les modules qui inclueront ce header utiliseront la fonction get, même si elle est modifiée entre temps.
exemple :
// moduleA.h
typedef struct s1_tag { int i; } s1;
extern s1* pMaStruct;
inline s1* getMaStruct( return pMaStruct; )
// moduleA.cpp
s1* pMaStruct = (s1*)malloc(sizeof(s1));
// le module B utilise pMaStruct
#include "moduleA.h"
s1* pStructDansModuleB = getMaStruct();
// Le module C utilise pMaStruct
#include "moduleA.h"
s1* pStructDansModuleC = getMaStruct();