У меня был этот код, который изначально читает WAV-файл, чтобы узнать количество образцов в нем. Используя этот размер, я пытался создать массив такого размера. После этого я читал образцы, формируя тот же самый файл .wav и сохранял в этом массиве, но из 762880 образцов он читал только 7500 отсчетов (приблизительно).Ошибка при создании массива в C, размер которого определен во время выполнения
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(){
FILE *fp;
long n,i=0;
float *data;
FILE* inp =NULL;
FILE* oup =NULL;
float value =0;
signed short ss;
/* Open file */
fp = fopen("k1s1.wav", "rb");
fseek(fp, 0L, SEEK_END);
n = ftell(fp);
n=n/2-22;
printf("n:%ld",n);
fclose(fp);
data=malloc(n*sizeof(float));
inp = fopen("k1s1.wav","rb");
oup = fopen("cs123.txt","wt");
fseek (inp,44,SEEK_SET);// that didn't help getting the right result !!
i=0;
for(i=0;i<n;i++){
fread(&ss, sizeof(signed short) ,1 , inp);
//Now we have to convert from signed short to float:
value=((float)ss)/(unsigned)0xFFFF;
value= value* 2.0;
value= value*100000;
value= ceil(value);
value= value/100000;
fprintf(oup,"%f\n",value);
data[i]=value;
///printf("%lf\t",value);
}
fclose(inp);
fclose(oup);
printf("done");
}
Когда я удаляю эту строку - «данные [i] = значение;» in for, программы отлично работают, и я могу видеть вывод в файле. Мне нужно сохранить эти значения в массиве, а также для дальнейших вычислений. Что может быть ошибкой?
Существует возможность утверждать, что вы должны проверять ошибки 'fopen()', 'malloc()', 'fread()' вызовов. Однако, если вы получаете разумный размер для 'n', я не сразу вижу проблему. Я не пробовал играть с кодом. Я заметил, что вы можете использовать 'rewind (fp)' или 'fseek (fp, 0L, SEEK_SET);', чтобы не открывать файл '.wav' (используя' fp' вместо 'inp' после этого). Однако это оптимизация, а не причина ваших проблем. –
Является ли компилятор воздействовать на выход? – Paras
Маловероятно, что компилятор будет основным фактором здесь. Код использует стандарт C - помимо включения '', хотя он не использует ни одну из его функций. Ясно, что есть шанс, что вы каким-то образом столкнетесь с проблемой компилятора. Какой компилятор вы используете? (Я только что скомпилировал версию вашего кода с проверкой ошибок на ключевых функциях, и, похоже, проблема не возникла. Первый (только) файл '.wav', который я нашел на моей машине, имел только 6152 образцов в но я не понимаю, почему размер является основным фактором. Я работал на Mac с macOS Sierra 10.12.3 и GCC 6.3.0.) –