N'obtenez-vous vraiment aucun diagnostic ? Chaque avertissement du compilateur C est significative, ils sont généralement des signes d'erreurs graves! En outre, lorsque vous demandez sur Stack Overflow, copiez les diagnostics du compilateur textuellement dans la question.
Le problème est ici:
fwrite(fin_val, sizeof(fin_val), 1, file);
Le prototype de fwrite
est
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Le premier argument doit être un pointeur sur const vide, mais vous passez dans un uint16_t
. Il devrait être &fin_val
, de sorte que fwrite
obtienne l'adresse à cette variable.
Sur une note connexe, fclose;
n'est pas un appel de fonction, et cela aussi aurait dû produire un message de diagnostic dans tout compilateur sain d'esprit. Il devrait être fclose(file);
.
Voici un exemple de sortie de GCC sans avertissement préalable:
% gcc -c pcm.c
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
et ici avec tous les avertissements activés:
% gcc -c pcm.c -Wall
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
In file included from pcm.c:1:0:
/usr/include/stdio.h:717:15: note: expected ‘const void * restrict’ but argument is of
type ‘uint16 {aka short unsigned int}’
extern size_t fwrite (const void *__restrict __ptr, size_t __size,
^~~~~~
pcm.c:13:1: warning: statement with no effect [-Wunused-value]
fclose;}
^~~~~~
J'utilise vs2017, Il y a juste un message d'erreur: Une violation d'accès s'est produite lors de la lecture de l'emplacement 0x ...., pas waring comme gcc @ _ @! –
@ 马 慧 超 pendant la * compilation *, pas pendant l'exécution du programme. –
@ 马 慧 超 il est absolument nécessaire que vous trouviez où ces diagnostics du compilateur sont sortis et lisez-les attentivement, sinon vous ne programmerez jamais un programme C qui fonctionne! : D –