begin process at 2012 05 29 21:23:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Probleme malloc


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme malloc

jeudi 20 novembre 2003 à 21:42:17 | Probleme malloc

ceeno

Bonjour à tous,

Je cherche a crée un tableau dont j'augmente la mémoire à chaque fois que je veu y enregistrer une nouvelle valeur.
Mais je n'y arrive pas...
Voici ce ke je fais :

typedef struct cps
{
float val;
int nb;
} cps_t;

cps_t * VC;
VC=(cps_t *)malloc(sizeof(cps_t));
VC[k].val=0;
VC[k].nb=0;

Puis pour agrandir d'une case VC :
VC=(cps_t *)malloc(sizeof(VC)+1);

Si quelqu'un pouvait m'aider ca serais sympa!

Merci d'avance!
vendredi 21 novembre 2003 à 00:28:33 | Re : Probleme malloc

BruNews

Administrateur CodeS-SourceS
VC=(cps_t *)malloc(sizeof(VC)+1); NENNI !!!
malloc demande la taille voulue en OCTETS, donc sizeof(VC) + 1 octet n'ira pas.
malloc(sizeof(VC)*2); pour 2 struct, etc...
Si tu dois augmenter la taille a l'execution va jeter un oeil du cote des listes chainees ou arbres binaires, a voir selon les besoins.
BruNews, ciao...
vendredi 21 novembre 2003 à 09:33:05 | Re : Probleme malloc

Vaughn018

oui, ou alors essaie d'incrémenter le bon nombre d'octets... sizeof(VC)+sizeof(cps_t)...


Vaughn018, Siaïeï handler...
vendredi 21 novembre 2003 à 10:27:18 | Re : Probleme malloc

ceeno

Merci pour vos réponse, mais cela ne fonctionne pas, le programme bloque systématiquement.
vendredi 21 novembre 2003 à 10:42:02 | Re : Probleme malloc

BruNews

Administrateur CodeS-SourceS
Deja une connerie pour moi, je n'avais pas fait attention car j'ai l'habitude de ne JAMAIS mettre le nom de variable dans le sizeof mais le nom de struct.
Et oui, sizeof d'un pointeur risque fort de donner 4 au lieu de la taille exacte requise pour la struct.
donc:
malloc(sizeof(cps_t)*2); pour 2 struct, etc...
BruNews, ciao...
vendredi 21 novembre 2003 à 10:52:10 | Re : Probleme malloc

Vaughn018

exact, meme erreur pour moi: à remplacer par sizeof(cps_t)*nbstruct + sizeof(cps_t) si tu incrémentes la taille

Vaughn018, Siaïeï handler...
vendredi 21 novembre 2003 à 11:15:04 | Re : Probleme malloc

ceeno

j'ai essayé avec ce que tu m'as dit, et le programme ne plante pas, le seul probleme est k'a chake allocution, les valeurs de VC sont perdues.
Voici mon programme test :



typedef struct cps
{
float val;
int nb;
} cps_t;

affiche( cps_t * VC)
{
int i;
printf("\n{");
for (i=0;i<2;i++)
{
printf("(%f,%d)",VC[i].val,VC[i].nb);
}
printf("}");
}

main()
{
cps_t * VC;
VC=(cps_t *)malloc(sizeof(cps_t));
VC[0].val=3.3;
VC[0].nb=5;
VC=(cps_t *)malloc(sizeof(cps_t)*2);
VC[1].val=4.4;
VC[1].nb=8;
affiche(VC);
getch();
}
vendredi 21 novembre 2003 à 11:23:46 | Re : Probleme malloc

BruNews

Administrateur CodeS-SourceS
Pour cela que serait mieux de gerer en liste chainee avec un pointeur Next sinon tu devras passer par du realloc qui demande un gros boulot au memory manager.
BruNews, ciao...
vendredi 21 novembre 2003 à 11:26:44 | Re : Probleme malloc

ceeno

Ok, donc c'est impossible avec malloc seulement. En tout cas,merci à BruNews et Vaughn018 pour vos réponses.
vendredi 21 novembre 2003 à 11:31:56 | Re : Probleme malloc

Vaughn018

Dans le fond je rejoin Brunews sur le fait que c'est pas très cohérent pour augmenter la taille dynamiquement, le malloc devant en principe etre utilisé une fois seulement. Ya du realloc() possible mais je crois que le mieux à faire est d'implémenter une petite liste chainée :
typedef struct cps {
float val;
int nb;
struct cps *suivant;
}cps_t;


Pour créer un objet de ce type, tu devrais déclarer une fonction qui déclare un cps_t * dont tu initialises les champs, avec le champ suivant à la valeur NULL. Ensuite lorsque tu crées un nouvel élément, il ne faut pas oublier de rattacher au précédent à l'aide du champ suivant toujours...


Vaughn018, Siaïeï handler...

1 2

Cette discussion est classée dans : probleme, vc, val, cps, malloc


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec VC++6 [ par Toobad ] Je viens d'installer VC++6 que j'ai déjà un prob--------------------Configuration: Untitled1 - Win32 Debug--------------------Linking...LIBCD.lib(crt0 Probleme d'execution avec VC++ [ par AntiSlash ] petit probleme incomprehensible (?):j'utilise VC++ 5.0 et je dessine une fenetre. Quand je mets rien dans la fenetre, et que je creer mon .exe, je le PROBLEME AVEC VC++ [ par Krox68 ] G commencé a programmer avec visual C++ et jaimerais savoir comment faire pour utiliser la progress barre (la barre de chargement) dans les MFCmerci Probleme VC 6.0 [ par pheno ] Bonjour, J ai un probleme avec visual studioLorsque je compile et j execute mon programme avec vc6.0 sous win xp, je n ai pas de probleme d executionL Allocation dynamique de mémoire (°_°) [ par ceeno ] Bonjour à tous,Je cherche a crée un tableau dont j'augmente la mémoire à chaque fois que je veu y enregistrer une nouvelle valeur.Mais je n'y arrive p Probleme VS.NET 2003 ... Prog VC++6 avec fstream.h [ par supergrey ] Bonjour, je n'arrive pas a compiler un programme fait sous VC++6. l'erreur suivante apparait:error C2065: 'ifstream' : identificateur non déclaréPourt Probleme d'allocation de mémoire dynamique (malloc/free) [ par PhantomPowaa ] Bonjour,J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais a utiliser les ressources sous vc++ (avec directdraw) [ par mannix ] bonjour à tous,voilà j'ai un probleme avec les p* de ressources de vc++.J'ai des images en bmp que je veux inclure dans mon exe sachant que ces bitmap probleme au link avec VC++ [ par marc hash ] salut a tous,j'ai un probleme a la compilation d'un de mes programmes sur Visual C++ 6.mon programme est lié a une base de donnée réalisée a l'aide de probleme ( de débutant ) avec VC++ [ par cas74 ] Salut à tous,j'ai un problême avec VC++:A chaque fois que je compile, il me dit Error Spawning cl.exe !!!!Je débute , alors si quelqu'un pouvait m'aid


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales