Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
988 connectés 

  FORUM HardWare.fr
  Programmation
  C

  need some help en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

need some help en C

n°904841
zarathoust​ra6
Posté le 22-11-2004 à 17:05:52  profilanswer
 

bonjour a vous,
j'ai touché pour la premiere fois au langage C il ya 7 jours environ, pour un projet numerique dans le cadre de mes études. J'ai fais ce qu'il y avait a faire: ok. J'aurai aimé aller un tout petit peu plus loin, et c'est la que la galere commence. Il s'agit d'un probleme de detente avec l'equation de bürgers. J'ai utilisé le schéma numérique de Law-Wendroff et la solution presente des oscillations, que je voudrais corriger avec un limiteur.  
Avant le limiteur, tout marchait bien. Apres, la compilation se fait bien, mais quand je lance mon executable:  
(0) handle exception: exception : STATUS_ACCESS VIOLATION
[main]scaalire 1253 (0) handle_exception: Dumping stack trace to scalaire.exe.core  
 
voici la partie concernant le limiteur:
#include <math.h>
#include <stdio.h>
 
 
#define MAX(a,b) ((a) > (b) ? (a) : (b))
 
 
/* On rappelle les variables globales utiles */
 
 
extern double cfl;
extern double  * a;    
extern long int imax;    
extern double * rho;  
extern double * fphy;
extern double * fnum;
extern double aroe;  
extern double rhom;
extern double um;
extern double eps;
extern double * delta;
extern double delta1;
extern double delta2;
void flux_numerique(void)
 
{
  long int i;
   
 
   
  /* Schema decentre p19
  for (i = 0 ; i <= imax-1 ; i++)  
  {
  aroe =(a[i]+a[i+1])/2;
  eps=MAX(aroe-a[i],MAX(0,a[i+1]-aroe));
   
   if (fabs(aroe)>eps)  
   {
     fnum[i] = 0.5*(fphy[i] + fphy[i+1]) - 0.5*(fabs(aroe))*(rho[i+1]-rho[i]);
      }
     else        {
    fnum[i] = 0.5*(fphy[i] + fphy[i+1]) - 0.5*0.5*((fabs(aroe)*fabs(aroe))/eps+eps)*(rho[i+1]-rho[i]);
         }
   
  }*/
  /*Schema de Lax-Wendroff p24*/
  for (i = 0 ; i <= imax-1 ; i++)  
  {
    aroe =(a[i]+a[i+1])/2;
     
   delta1=rho[i]-rho[i-1];
   delta2=rho[i+1]-rho[i];
   
     
 if (delta1+delta2==0)  
    {  delta[i]=0;  }    
   else
       {delta[i]=(delta1*delta2*delta2+delta2*delta1*delta1)/(delta1*delta1+delta2*delta2)
 
       
       ;}
           
         
   
   
     fnum[i] = 0.5*(fphy[i] + fphy[i+1]) - 0.5*cfl*fabs(aroe)*((rho[i+1]-0.5*delta[i+1])-(rho[i]+0.5*delta[i]));    
   
  }  
 }  
 
toute aide sera la bienvenue!
eric

mood
Publicité
Posté le 22-11-2004 à 17:05:52  profilanswer
 

n°904853
Lam's
Profil: bas.
Posté le 22-11-2004 à 17:24:20  profilanswer
 

Il est probable que un de tableaux ne soit pas alloué.  
Le fichier "core" généré t'indique le contexte du bug. Donc, le plus simple, c'est de rajouter l'option de compilation "-g" à ton compilateur pour avoir les infos de debuggage, puis d'exécuter ton programme.  
Lorsqu'il crash:
gdb ./MonProgramme core  
ou bien:
dbx ./MonProgramme core
 
Une fois dans le debugger, regarde comment te servir des commandes "where", "frame" et "print".
 

n°904876
zarathoust​ra6
Posté le 22-11-2004 à 17:46:19  profilanswer
 

merci!
j'avais effectivement oublié d'allouer un tableau.
 
eric


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  need some help en C

 

Sujets relatifs
Help !! Clié + recepteur sur un port ../!\ HELP /!\........Ca veut dire quoi ???
pb "notice indefined offset : 0" help !Need help avec les frames
gros pb avec la fonction mail ... helpi help ! =>debutant
mail() et \ sur mes ' help :)Help ! Compréhension de programme en assembleur
help classe auto référentielle ( chainage d'objets ) 
Plus de sujets relatifs à : need some help en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR