malloc() alloue size octets, et renvoie un pointeur sur la mémoire allouée. Le contenu de la zone de mémoire n’est pas initialisé. Si size est nulle, malloc renvoie soit NULL ou un unique pointeur qui pourra être passé ultérieurement à free() avec succès.
Jyaif (./1473) :
Folco a lu "seize" à la place de "size" ??
Folco (./1475) :Non. Ne fais pas de suppositions sur la taille des pointeurs. Pareil pour l'endianness.
encore que sur les sizeof(uint*) doivent être constants quelque soient les implémentations justement
GoldenCrystal (./1472) :Mais sizeof(char), ça fait toujours 1
sizeof c'est fait pour les chiens ?
Jyaif (./1484) :Euuuh... tu déconnes, là ? Énormément de logiciels le font, ne serait-ce que pour les traductions, ou pour utiliser les fonctions Windows qui sont en Unicode par défaut. Sous Linux je sais pas trop, mais j'imagine que ça doit être pareil.
Bon, honnêtement c'est chiant de gérer autre chose que l'ASCII en C/C++, et quasi-personne ne le fait.
Thepro (./1486) :
./1484 1/ C'est faux. Un char fait toujours un char, mais par forcement un octet. sizeof retourne la taille en nombre de char donc renvoie toujours 1 pour sizeof(char).
malloc prend en entrée une taille en nombre de char. La confusion entre les deux, comme dans la plupart des documentations (./1471 par exemple) vient de la mauvaise traduction de byte en octet. Un char correspond à un byte, mais pas forcément à un octet. Un byte et un groupe d'un certain nombre de bits qui peut être différent de 8, sa traduction en octet est souvent une erreur. Le mot octet existe aussi en anglais...
module.h: struct CUSTOM_DATA; typedef struct { SDL_Surface* background; SDL_Rect bgPosition; int numIcons; ICON* iconList; struct CUSTOM_DATA* customData; } MODULE_DATA;
careers.h, inclus après module.h: typedef struct { uint16_t numEntries; ENTRY_CAREER* careersPtr; } CUSTOM_DATA;
uint16_t numberEntries = 0; MODULE_DATA* data; data = malloc (sizeof(MODULE_DATA)); [...] data->customData = malloc (sizeof(uint16_t) + sizeof(ENTRY_CAREER*)); data->customData->numEntries = numberEntries;
Jyaif (./1484) :
Donc te connaissant, maintenant le premier truc sur ta TODO c'est de supporter l'UTF-8 dans ton programme, non?
struct CUSTOM_DATA; typedef struct { SDL_Surface* background; SDL_Rect bgPosition; int numIcons; ICON* iconList; struct CUSTOM_DATA* customData; } MODULE_DATA;
typedef struct { void (*unload)(MODULE_DATA* data); void (*manage)(MODULE_DATA* data); MODULE_DATA* data; } MODULE;
#include "module.h" #include "careers.h"
aze (./1493) :
c'est crade et potentiellement un nid à emmerdes. utilises un void* que chaque module va caster différemment
Folco (./1480) :m*rde
Par contre, les pointeurs sur des types m, je connais pas.
Jyaif (./1484) :
Bon, honnêtement c'est chiant de gérer autre chose que l'ASCII en C/C++, et quasi-personne ne le fait.
Zerosquare (./1485) :
Euuuh... tu déconnes, là ? Énormément de logiciels le font, ne serait-ce que pour les traductions, ou pour utiliser les fonctions Windows qui sont en Unicode par défaut. Sous Linux je sais pas trop, mais j'imagine que ça doit être pareil.
Folco (./1488) :
Pour changer, j'ai un warning àlakhon, et je ne sais pas ce que GCC veut dire. Ce qui m'emmerde, c'est que je dois faire qqchose de travers... sans m'en rendre compte.
typedef struct { uint16_t numEntries; ENTRY_CAREER* careersPtr; } CUSTOM_DATA;
typedef struct CUSTOM_DATA { uint16_t numEntries; ENTRY_CAREER* careersPtr; } CUSTOM_DATA;