1

Question de newbie en c wink

Voilà, mon prog fait

short *x = NULL;
unsigned short nombre=6
x=calloc((nombre), sizeof(short));
x[0]=12
x[1]=32
...
x[5]=51

nombre++;
x=realloc(x,(unsigned long)(nombre*sizeof(short)));

Et là, impossible d'accéder au tableau puis address error
Pourquoi ?

Plus simplement, je voulais créer un tableau qui puisse s'agrandir pendant l'exécution, sans perte de données. Une autre méthode ???

2

Déjà, tu pourrais mettre les ; !!!
grin.
Mais bon, je pense que tu les avaient déjà mis !
Vive CF !!
Vive la Time To Team !!!

3

ben, essaye d'enlever le NULL dans short *s = NULL

et pis c pas bon de faire unsigned short nombre=6;
il vo mieux faire unsigned short nombre=0;
nombre = 6;

et pis... confus

4

ben oui les ";" ils y sont grin
pour short *s = NULL; de tte façon il est initialisé le pointeur avec calloc

pourquoi il faut mieux faire
unsigned short nombre=0;
nombre = 6;

que unsigned short nombre=6; ???




5

ben faut pas.
youpi !

6

c'est marqué où ?
tigcc ne respecte pas le C ANSI ?

7

juste une question : si ton prog est en mode KERNEL, je sais pas si ça vient pas d'UniOS (si j'ai bonne mémoire, JM dit dans la doc qu'il y a des fonctions qui ne sont pas supportées, et je crois qu'elles portent sur realloc... je me plante peut-être ?)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

8

l'initialisation statique cause le problème suivant :
la 2eme fois qu'on lance le prog la variable ne se trouve pas à la valeur prévue dans le code mais contient ce qu'elle contenait au moment ou on a quitté la première fois.
en faisant une assignation à chaque fois que le prog est exécuté la variable retrouve la valeur qu'on veut.

9

j'utilise en effet unios mais mon prog est en nostub
je vais essayer de le lancer sans installer unios

10

Je croie <i>realloc</i> sur les pointeur est fonction bricolée (enfin, une marco qui appelle differents ROM_CALLs, koi)...

Il doit y avoir un ROM_CALL qui le fait avec un handle, c'est surement plus sur ...

11

PS : pour le truc de UniOS, je suis pas sur !
C'est possible que le bug vienne aussi de TIGCC, comme pour les request dans les boites de dialogue... ou alors de ton source (mais comme j'ai jamais étudié la fonction realloc, je préferre pas m'avancer sur ce point : je risuqerai de dire des conneries !)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

12

Oui, c'est un truc u style :
#define realloc(a,sz) ({void *r; HANDLE h=GetHandle(a); HeapRealloc(h,sz); r=HLock(h); r;})

13

si tu le dis...smile
mais j'avais aussi essayé avec des pointeurs et les fonctions heap... faites pour et ça marchais pas...
je dois être maudit grin

14

Sur tu le fait avec les handles, il faut savoir que ton hadle peut etre deplacé: tu doit donc modifier le pointeur (refaire un HeapDeref)!

15

Euh oui j'ai oublié le HeapUnlock()
pour pouvoir agrandir un bloc mémoire, sauf si on a le bol d'avoir de la place vide juste après (ce qui est très rare), on est obligé de le déplacer, donc de le dévérouiller