je la struct suivante:pointeurs de réglage à Structs
struct Datastore_T
{
Partition_Datastores_T cmtDatastores; // bytes 0 to 499
Partition_Datastores_T cdhDatastores; // bytes 500 to 999
Partition_Datastores_T gncDatastores; // bytes 1000 to 1499
Partition_Datastores_T inpDatastores; // bytes 1500 1999
Partition_Datastores_T outDatastores; // bytes 2000 to 2499
Partition_Datastores_T tmlDatastores; // bytes 2500 to 2999
Partition_Datastores_T sm_Datastores; // bytes 3000 to 3499
};
Je veux définir un char * pour pointer vers un struct de ce type comme ceci:
struct Datastore_T datastores;
// Elided: datastores is initialized with data here
char* DatastoreStartAddr = (char*)&datastores;
memset(DatastoreStartAddr, 0, 3500);
Le problème que j'ai est DatastoreStartAddr a toujours la valeur zéro lorsqu'il doit pointer vers la structure qui a été initialisée avec des données.
Qu'est-ce que je fais mal?
Editer: Ce que je veux dire par zéro, c'est que les "valeurs" dans la structure sont toutes des zéros même après avoir initialisé la structure. L'adresse n'est pas nulle, ce sont les valeurs dans la structure qui sont nulles.
Edit: Je pense que je pose la mauvaise question. Recommençons. Si j'ai un struct qui est initialisé avec des données, et un autre objet tient à jour un membre de champ qui est un pointeur sur cette struct, si le struct change directement:
struct Datastore_T datastores;
char* DatastoreStartAddr = (char*)&datastores;
datastores.cmtDatastores.u16Region[0] = Scheduler.GetMinorFrameCount(); // byte 40,41
datastores.cmtDatastores.u16Region[1] = Scheduler.GetMajorFrameCount(); // byte 42,43
je ne devrais pas être en mesure d'accéder à ces changements utilisant le pointeur DatastoreStartAddr?
EDIT: Le code suivant tente de lire l'ensemble des données dans datastores, mais en utilisant le pointeur vers la struct:
CMT_UINT8_Tdef PayLoadBuffer[1500]= {NULL};
int TDIS = 0;
int DIS = 0;
int DSA = 0;
//copy DataStore info using address and size offsets
if ((PayLoadBuffer + TDIS + DIS) < IndvDEMMax)
{
memcpy((PayLoadBuffer + TDIS), Datastores+DSA, DIS);
TDIS += DIS;
}
Dans la ligne memcpy((PayLoadBuffer + TDIS), Datastores+DSA, DIS)
, Datastores devrait pointer vers la structure et les tentatives d'accéder à un compenser dans cette structure. Mais comme la valeur est toujours zéro, il copie zéro dans le PayLoadBuffer.
Vous ne pouvez pas juste 'memset (& datastores, 0, sizeof (struct Datastore_T));' ou quelque chose? –
Puisqu'il s'agit de C++, vous pouvez utiliser DataStore_T datastores = DataStore_T(); '(initialisation de la valeur pour le gain!) –
@Bobby Si c'est votre code d'initialisation qui est actuellement en panne, POURQUOI NE L'AVEZ-VOUS PAS MONTRÉ? Et qu'est-ce que le truc de memset() a à voir avec ça? Vous vous rendez compte que l'appel de memset mettra zéro la structure, je suppose? –