begin process at 2012 05 30 18:07:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Tableau en parametre


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

Tableau en parametre

jeudi 4 mai 2006 à 20:58:04 | Tableau en parametre

tomalille

Bonjour,
j'ai un segmentation fault sur l'execution d'un programme.
Le probleme vient d'une fonction ayant un tableau en parametre. Lorsque je veux acceder au tableau j'ai segmentation fault alors que le programme compile

voici le programme:
bool bellmanFord(int origine, int nbNoeuds, float **distance, int borneRoutage)
        {
            int i,u,v,h;
            float mini;
            float d[nbNoeuds];
            int pi[nbNoeuds];
            float B[nbNoeuds][borneRoutage];
            ARETE a;
            vector<ARETE>::const_iterator itr = aretes.begin();
              vector<ARETE>::const_iterator fin = aretes.end();

                        /*methode nouvelle*/
            /*for(u=0;u<nbNoeuds;u++)
                for(h=0;h<nbNoeuds;h++)
                    if(u==borneRoutage)
                        B[u][h] = FLT_MAX;
                    else
                        B[u][h] = 0;

            for(h=0;h<borneRoutage;h++)
            {
                for(u=0;u<nbNoeuds;u++)
                    B[u][h] = B[u][h-1];
                itr = aretes.begin();
                while(itr!=fin)
                {
                    a = *itr;
                    if(B[a.origine][h-1]<distance[a.origine][a.destination])
                        mini = B[a.origine][h-1];
                    else
                        mini = distance[a.origine][a.destination];
                   
                    if( mini > B[a.destination][h])
                         B[a.destination][h] = mini;
                       
                    itr ++;
                }
            }*/
                        /*methode bouquin*/
                    /*Initialisation*/
            for(i=0;i<nbNoeuds;i++)
            {
                d[i] = INT_MAX;
                pi[i] = nbNoeuds + 1;
            }
           
            d[origine] = 0;
            cout << distance[0][0];   //Probleme!!!
           
            return true;
        };

Appelle de la fonction:
g.bellmanFord( 0 , 5 , (float **)&distance,borneRoutage);

Merci de votre aide. je suis sur ce probleme depuis ce matin...
jeudi 4 mai 2006 à 21:26:02 | Re : Tableau en parametre

laurent1024

Membre Club
g.bellmanFord( 0 , 5 , (float **)&distance,borneRoutage);
A priori le & est inutile.
++
jeudi 4 mai 2006 à 21:29:29 | Re : Tableau en parametre

tomalille

Merci,
ce petit changement ne change rien à mon pb. Malheureusement... :-(
je rajoute la déclaration de distance:
int distance[nbNoeuds][nbNoeuds];

Si qqn a une idée ce serait sympa
Merci
vendredi 5 mai 2006 à 08:31:06 | Re : Tableau en parametre

laurent1024

Membre Club
Dans ton programme tu dois avoir un autre problème:
         float d[nbNoeuds];
            int pi[nbNoeuds];
            float B[nbNoeuds][borneRoutage];
nbNoeuds et bornesRoutage ne sont pas des #define, dont tu peut pas declarer tes tabeaux comme ca normalement. Il faut que tu les alloue dynamiquement.

int tab[6]; // tu a le droit

int a =6;
int tab[a]; // normalement tu as pas le droit
vendredi 5 mai 2006 à 10:56:12 | Re : Tableau en parametre

laurent1024

Membre Club
Pour le problème  : cout << distance[0][0];   //Probleme!!!
Tu peut essayer de faire int a = distance[0][0]; cout << a;  pour voir si ca marche ou pas.
vendredi 5 mai 2006 à 10:57:22 | Re : Tableau en parametre

AlexN

oui je pense aussi qu'au moment de la compilation, la variable nbNoeuds n'étant pas définie, puisque c'est une variable d'exécution, le complilateur ne connait pas la taille des tableaux. Il doit faire une supposition (du type nbNoeuds == 0) et tes tableaux ne sont pas alloués correctement. Il faudrait peut être passer par une allocation dynamique (malloc ou autre)
vendredi 5 mai 2006 à 11:17:32 | Re : Tableau en parametre

ymca2003

g.bellmanFord( 0 , 5 , (float **)distance,borneRoutage);
avec float distance[nbNoeuds][nbNoeuds];

ce cast ne peut pas marcher (cf ma réponse sur ton autre question)

car

distance[x][y] <=> *(distance+x*dim1+y)
si float distance[dim1][dim2];

distance[x][y] <=> *((*(distance+x)) + y)
si float** distance

dans les 2 cas tu n'accèdes pas à la mémoire de la même facon donc on peut pas caster de l'un à l'autre...
vendredi 5 mai 2006 à 11:23:25 | Re : Tableau en parametre

ymca2003

petite erreur de ma part :

distance[x][y] <=> *(distance+x*dim2+y)
si float distance[dim1][dim2];


Cette discussion est classée dans : int, mini, float, origine, nbnoeuds


Répondre à ce message

Sujets en rapport avec ce message

équation et tableaux [ par cabarrus ] je ne trouve pas l'erreur dans mon programme?#include#includeint deltanul(int);float deltainf(float);float deltasup(float);void main(void){float a,b,c dépassement capacité d'un float et int [ par golum ] result=scanf("%f",&coef); if (result !=0 && coef !=0)Voila si j'entre un nombre délirant style 9999999999999999999999999999999999999999999999999999999 arondir un float en int [ par guillaume21 ] je voudrai convertir un float en int (le cast tronque mais n'arrondi pas) sans utiliser la "bidouille" :inr i;float f;char car[6];sprintf(car,"%6.0f", Probl avec float et int [ par David2907 ] Après un calcul, comment faire pour afficher un resultat sans virgule ou un resultat avec virugule???Merci pb incrementation variable. [ par conan76 ] Voila j'ai passé l'après midi a chercher d'ou vient mon problème sans succès.je tente même de faire des affichages console avant et après incrémentati pourquoi ca marche pas :'( [ par xboxut ] salut j ai un probleme avec une fonction pour initialiser des particules,pouvez vous me dire pourquoi il ne marche pas et comment le faire marcher#inc comment tester un type de donné en C++ [ par Armandopoulos ] Salut !!en VC++Je voudrai bien savoir comment tester un type de donné (par ex. int , float , long , char) entré par l utilisateur au clavier.J ai pens C++ -> Java [ par christouilhe ] Bonjour à vous tous.J'ai une question à vous poser ...Il se trouve que je dois retranscrire un programme C++ en Java, mais il y a une fonction que je connection BDD en C [ par naru ] Bjr J'ai un code dans lequel je dois modifier le chemin de la bdd, et rentrer les paramètres de l'utilisteur (login/pass). Seulement, je ne vois pas Problème d'entrée (cin >>) dans un tableau de float [ par Oeil_de_taupe ] Hello tout le monde,désolé de vous importuné. Mais j'ai fait une toute petite source pour apprendre à allouer de la mémoire pour une variable puis de


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 : 0,842 sec (4)

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