Probleme d'execution d'un programme en C

Bonjour,
j'ai fait un programme en langage c et à chaque fois que je l'execute un message s'affiche comme quoi mon
programme a rencontré un probleme et doit fermer...
merci d'essayer de m'aider je vous donne mon programme:

#include<stdio.h>
#include<stdlib.h>

int ecrire (char *nom,int *tab,int taille){
int i;
FILE *f=fopen(nom,"w");

fprintf(f,"%d\n",taille);

for(i=0;i<taille;i++){
fprintf(f,"%d\n",tab[i]);
}

fclose(f);

return 0;
}

int main (int argc,char **argv){
int i;
int *tab;
int taille;

srand(10);

printf("Entrez la taille du tableau :\n");
scanf("%d",&taille); /*jusque là il arrive à executer mais il n'arrive pas à faire la suite */

tab=(int *)malloc(taille*sizeof (int));
if(tab==NULL) return 0;

for(i=0;i<taille;i++){
tab[i]=rand()%1000;
}

ecrire(argv[1],tab,taille);
system("pause"); /* je l'utilise à cause de DEV C++*/

return 0;
}
Configuration: Windows XP Internet Explorer 7.0

3 réponses

  1. Contributeur
    Salut,
    J'ai pas tout regardé, mais j'ai déjà vu une erreur :
    dans la fonction main :
    mets int tab tout simplement au lieu int *tab;

    Cdlt
    0
    1. Voici ma proposition :
      #include<stdio.h>
      #include<stdlib.h>

      int ecrire (char *nom,int *tab,int taille){
      int i;
      FILE *f=fopen(nom,"w");

      fprintf(f,"%d\n",taille);

      for(i=0;i<taille;i++){
      fprintf(f,"%d\n",tab[i]);
      }

      fclose(f);

      return 0;
      }

      int main(){
      int tab[3]={7,9,9};
      ecrire("uuuuu.txt",tab,5);
      return 0;
      }
      0
      1. ceci pourrait aider au débuggage :

        FILE *f=fopen(nom,"w");

        il faudrait vérifier que le pointeur n'est pas NULL avant d'écrire dans ce fichier !

        De plus, en parlant de vérification de pointeur NULL,

        if(tab==NULL) return 0;

        au lieu de quitter directement un petit message servirait à voir s'il y a eu un problème à cet endroit. (Idem pour le test que je viens de te conseiller de mettre)

        d'autre part n'oublie pas de libérer la mémoire allouée avec malloc avec la commande free !
        0