J'essaie d'imprimer des données dans Showvalues (grand public *) mais je suis incapable de le faire ..
int main() { //contructing mainStruct with some values mainStruct* msPtr = constructMainStruct(); //trying to print values which has been created in above step showValues(msPtr); }
3 Réponses :
Votre problème d'impression (qui n'est en aucun cas le seul problème) est dans la ligne:
for(uint32_t i=0; i > msPtr->sizeofSubStruct; i++)
La taille doit être offsetof (supporters, substructarrataray) + Tailleof (Substruct) * 10 code>. Mais c'est probablement tout ub quand même.
Oui! Vous avez raison de "i> msptr-> ..", c'était une faute de frappe tout en écrivant un exemple de code ici. Malgré la correction de cela, il n'imprime pas.
@Ali je pense que cela devrait, mais en tout cas de savoir ce qui se passe, vous devez utiliser un débogueur.
Outre ce que @soronelhaetir a déjà remarqué, la fonction Le code doit ressembler à ceci; p> < Pré> xxx pré> p> showvalues code> n'émendait pas le pointeur code> Substructeur code>.
Voici suivi est le code de travail pour showvalues et complet code programme est comme ci-dessous: p>
Un membre de tableau flexible est en C, cette question a des balises C ++. C ++ n'a pas de matrices flexibles. Vous devez utiliser
std :: vecteur code> ou
std :: tableau code> en fonction des exigences.
Pourquoi
malloc code> utilisé? Pourquoi pas
neuf? code>
Pourquoi utiliser des pointeurs bruts et des matrices brutes? Il suffit d'utiliser des classes de conteneurs comme
std :: vecteur code> et
std :: tableau code>.
En C ++, l'idiome d'élément de tableau flexible est un comportement indéfini.
Non! Malheureusement, je ne peux pas utiliser de vecteur ou de tableau, cela devrait être tel qu'il est. En ce qui concerne la matrice flexible, car il est c ++, je dois donner une taille [1] telle qu'elle est mentionnée dans le code.
S'il vous plaît expliquer: pourquoi
substructurray de sous-transformation [1]; code> a la taille 1? N'est-ce pas la même chose que
substruct_var; code>? Ou pourquoi pas
Substruct * Substruct_array; code>?
Je parle d'un code de production qui est écrit dans 80 et ne peut pas être modifié et les interfaces sont définies comme ces structures.
@Ali "Je parle d'un code de production qui est écrit dans des années 80" i> bonne chance avec ce code dans la production. Je considère sérieusement que je prendrais sérieusement les efforts et le refacteur qui shite.
@ ννντα ῥεῖ Yep, sûr :)
ConstructMainStructeur code> est incorrect. Il ne construit pas la matrice de
Substruct code> correctement. Il mélange des pointeurs de
domestique code> et
Substruct code>. Il crée 10
standard (code> s), puis itération comme si 10
Substructs code> ont été créés. Ceci est tout simplement faux. Rien à faire, mais jetez-le et réécrivez-le correctement.
showvalues code> affiche simplement la valeur de
SSPTR-> Somenumumber code> - répétablement la même valeur.
SSPTR CODE> n'est jamais changé pour pointer quelque chose d'autre.
Envisager de remplacer les instructions d'impression avec l'équivalent C et la procédure en C avec un compilateur C.
Vous avez manqué la balise C ++, mais cela fait une autre partie du code plutôt curieux ... Par exemple, pourquoi utiliser
Typedef code> pour définir les types-alias pour les structures? Les noms de classe et de structure sont également des noms de type, donc par ex.
Struct Substruct {...}; code> est suffisant pour définir un "type"
Substructeur code>.
En C ++, pour effectuer l'élément de tableau flexible, utilisé
typedef struct {uint32_t tailleofsubtructructeur; Substructarrata de sous-transformation [1024]; } Mainstruct; code> puis réduisez 1024 à la valeur la moins nécessaire. Ce sera non ub (et aussi bien pour le code C aussi).