need some help en C

need some help en C - C - Programmation

Marsh Posté le 22-11-2004 à 17:05:52    

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

Reply

Marsh Posté le 22-11-2004 à 17:05:52   

Reply

Marsh Posté le 22-11-2004 à 17:24:20    

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".
 

Reply

Marsh Posté le 22-11-2004 à 17:46:19    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed