Bonsoir à tous,

Le code ci-dessous :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
 
main()
{
    int N;
    printf("Donnez le nombre de caractères à lire");
    scanf("%d", &N);
    char *tab;
    int nbc, nbt, i, j, k;
	char nomFichier[21];
 
    tab=malloc((N+1)*sizeof(char));
 
	FILE *fichier;
 
	printf("nom du fichier à lister : ");
	scanf("%20s", nomFichier);
 
	fichier = fopen(nomFichier, "r");
 
    while (!feof(fichier))
    {
        nbc=fread(&tab[30*j],sizeof(char),30, fichier);
        j++;
        nbt=nbc+nbt;
    }
 
 
 
    while (*tab!='\0') {
        printf("%c", *tab);
        tab++;
 
    }
 
    printf("\n");
	fclose(fichier);
	printf("%d", nbt);
    free(tab);
 
 
}
renvoie l'erreur suivante :
FichierSimple.exe(284) malloc: *** error for object 0x103b00c2e: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
926Abort trap: 6

Alors que si je remplace la boucle while par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
for (k=0; k<nbt; k++ )printf("%c",tab[k]);
Je n'ai plus de message d'erreur.
Pourriez-vous svp m'aider à comprendre pourquoi ?
Merci !