Ah OK.
Ah OK.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Le plantage a lieu avec pour case MODE_BANK_ARRAY. Le code exécuté dans ce cas est, en supposant qu'aucune des erreurs détectées par le code ne se produise, et en supprimant des cast abusifs et inutiles :
Je suis étonné du calcul de pBase + iOffset + sizeof(ST_SC_BankInfo) * iID avec un pbase de type void* : la taille de l'objet pointé est inconnue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int SC_ShmGetStru(int iShmID, int iMode, int iID, void **pAddr) //iMode ==MODE_BANK_ARRAY { int i, iOffset, iStruSize; ST_SC_BankInfo *pstBank = NULL; ST_SC_SvcInfo *pstSvc = NULL; void *pBase; pBase = shmat(iShmID, NULL, 0); iOffset = sizeof(ST_SC_Config); iStruSize = sizeof(ST_SC_BankInfo); *pAddr = pBase + iOffset + sizeof(ST_SC_BankInfo) * iID; return 0; }
Vu la présence d'un sizeof dans ce calcul, j'opterai pour :
Quand au if :
Code : Sélectionner tout - Visualiser dans une fenêtre à part *pAddr = (char*)pBase + iOffset + sizeof(ST_SC_BankInfo) * iID;
me semble logique
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( (pBase = shmat(iShmID, NULL, 0)) == (void*)-1) ...
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager