J'essaye d'allouer un bloc de mémoire, et stocke une liste de structures sans employer plusieurs mallocs pour chacun ... ceci est juste un exemple générique, je n'ai pas le code original I travaillait avec plus tôt, mais c'est l'idée générale, mais mon problème était que je recevais une corruption de tas quand d'autres parties de mon code s'exécutaient après l'appel de la fonction InitPoints(). Je ne sais pas quelle partie de mon code est illégale, mais je suppose que c'est dans la boucle for de la fonction InitPoints(). J'essaie d'utiliser cela comme une table, puis je peux créer des tables supplémentaires de taille définie si je manque de mémoire et les lier ensemble ... donc un peu comme un tableau dynamique en expansion si cela a du sens.en utilisant malloc pour le bloc de structures
typedef struct Tb{
POINT points;
POINT *next;
} TABLE;
typedef struct Pt{
int x;
int y;
}POINT;
POINT *mypoints;
int main() {
int size = 10;
int i = 0;
mypoints = InitPoints(size);
for(i=0; i < size; i++)
{
printf("mypoint [%d] = (%d,%d)\n",i, mypoints->x, mypoints->y);
mypoints = mypoints + sizeof(POINT);
}
// some other code...
// i.e. createThread(....)
return 0;
}
POINT* InitPoints(int size)
{
POINT *tmp;
POINT *orig;
int a = 10;
int b = 1000;
orig = (POINT*) malloc (sizeof(POINT) * size);
if(orig == NULL)
return NULL;
tmp = orig;
for (i = 0; i < size; i++)
{
tmp->x = a++;
tmp->y = b++;
tmp = tmp + sizeof(POINT);
}
return orig;
}
merci, et je suis sur crack pour essayer de le faire, ou est-ce que les gens utilisent réellement cela? Je ne veux pas utiliser une liste chaînée simple pour éviter de maintenir une liste. Je sais que la plupart du temps je n'aurai qu'un petit nombre d'éléments avec lesquels travailler ... disons 10, mais au cas où j'aurais besoin de plus d'espace, je vais en allouer 10 et ainsi de suite ... – emge
Non, ce n'est pas particulièrement mauvais . Ne faites pas attention à l'arithmétique de votre pointeur! – BobbyShaftoe