CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Pb utilisation de malloc (débutant)

siamos1
siamos1
Niveau 8
28 novembre 2011 à 17:02:33

Bonjour,

je débute en C et je souhaite réaliser un programme dans lequel j'utilise malloc. Fonction que je ne semble pas bien maitriser car lorsque je lance ce programme :

int dim;
double *tab1, *tab2, *tab3;
printf("Vous allez creer T1, qu'elle taille souhaitez vous ? ");
scanf("%d", &dim);
printf("Ecrivez chacun de ses elements : \n");
tab1=malloc(dim*sizeof(double));
tab2=malloc(dim*sizeof(double));
tab3=malloc(dim*sizeof(double));
creation_saisie_tableau(tab1, dim);
afficher_n_premieres_valeurs(tab1, dim);

il n'affiche que des 0 comme valeurs de mon tableau (alors que les foncions "creation_saisie_tableau" et "afficher_n_premieres_valeurs" fonctionnent très bien dans d'autres programmes).

J'ai pourtant chercher sur google et sur le fameux SDZ et je ne vois pas mon erreur.

Petite précision : je peux débugger et lancer le programme, mais lorsque je passe ma souris sur le signe égale entre "tab1" et "malloc(...)" j'ai le message :
"Error : impossible d'assigner une valeur de type "void *" à une entité de type "double *"
(Sous Microsoft Visual c++ 2010 Express)

Merci par avance

siamos1
siamos1
Niveau 8
28 novembre 2011 à 17:16:57

Dans le doute que ça vienne de mes fonctions "creation_saisie_tableau" et "afficher_n_premieres_valeurs" je les mets quand même, si ça peut aider quelqu'un à m'aider :)

void afficher_n_premieres_valeurs(double *tab1[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("Valeur %d du tableau : %d \n", i+1, tab1[i]);
}
}

double creation_saisie_tableau(double *tab, int dim )
{
int i;
double valeur;
for (i=0;i<dim; i++)
{
scanf("%lf",&valeur);
tab[i]=valeur;
}
}

Paulop
Paulop
Niveau 12
28 novembre 2011 à 17:30:02

Là en regardant vite fait je pense qu'il te faut rajouter un cast explicit devant les malloc : (double*) malloc(dim*sizeof(double)).
En effet, malloc renvoie un void*, car il ne sait pas vraiment qu'elle utilisation de la zone allouée tu vas faire.

siamos1
siamos1
Niveau 8
28 novembre 2011 à 17:39:01

J'ai forcé la fonction malloc (ce qui a eu pour effet d'enlever le message lorsque je passe ma souris sur le signe égal)

mais l'erreur persiste toujours : les valeurs de mon tableau reste à 0

Mon programme contient d'autres choses inutiles ici, mais si je pouvais faire tourner le programme équivalent suivant ça résoudrait mon problème :

  1. include <math.h>
  2. include <stdio.h>
  3. include <stdlib.h>

void creation_saisie_tableau(double *tab1, int dim );
void afficher_n_premieres_valeurs(double *tab1, int n);

main()
{
int dim=2;
double *tab1;
tab1=(double*)malloc(dim*sizeof(double));
creation_saisie_tableau(tab1, dim);
afficher_n_premieres_valeurs(tab1, dim);
}

double creation_saisie_tableau(double *tab1, int dim )
{
int i;
double valeur;
for (i=0;i<dim; i++)
{
scanf("%lf",&valeur);
tab[i]=valeur;
}
}

void afficher_n_premieres_valeurs(double *tab1, int n)
{
int i;
for (i=0; i<n; i++)
{
printf("Valeur %d du tableau : %d \n", i+1, tab1[i]);
}
}

Pocolo
Pocolo
Niveau 10
28 novembre 2011 à 17:44:53

Dans le printf tu utilises %d alors que tu veux afficher des double.

siamos1
siamos1
Niveau 8
28 novembre 2011 à 17:55:24

Une autre erreur c'était glissé :
la fonction creation_saisie_tableau(double *tab1, int dim ) était un double et non un void (1ère ligne après les include)

En tout cas merci beaucoup, cela fonctionne maintenant !

(Quand je vois mon erreur j'ai un peu honte maintenant)

Paulop
Paulop
Niveau 12
28 novembre 2011 à 18:05:42

Il n'y à pas à avoir honte du tout, c'est comme cela qu'on apprend.

tbop2
tbop2
Niveau 10
29 novembre 2011 à 01:10:39

Il n'y a pas de honte à faire des erreurs ça va plus loin que l'apprentissage ... ça fait partie intégrante du métier et du développement d'un logiciel.

Sinon la prochaine fois poste ton code sur pastebin. Ca va celui-ci était tout petit mais c'est quand même plus propre.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment