need some help en C - C - Programmation
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".
Marsh Posté le 22-11-2004 à 17:46:19
merci!
j'avais effectivement oublié d'allouer un tableau.
eric
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