В настоящее время я работаю над кодом C ниже. Мне нужно получить доступ к массиву за пределами цикла while
, после fclose
. Похоже, что ядро blackfin ADSP падает каждый раз, когда я запускаю его. Я буду нуждаться в этом дальше, чтобы выполнить БПФ. Пожалуйста помоги!Невозможно сохранить массив вне цикла while
#include <stdlib.h>
#include <stdio.h>
#include <flt2fr.h>
#include <fract_math.h>
#include <math_bf.h>
#include <complex.h>
#include <filter.h>
int main()
{
int n = 1024;
long int dat1[n];
FILE *file1;
fract16 *m;
int i;
// file1 open and read the values
file1 = fopen("0.dat", "r");
if (file1 == NULL) {
printf("I couldn't open 0.dat for reading.\n");
exit(0);
}
while (!feof(file1)) {
fgets(dat1, n, file1);
m = malloc(sizeof(fract16) * n);
for (i = 0; i < n; i++) {
sscanf(dat1, "%f", &m[i]); //getting error here
}
}
fclose(file1);
printf("%lf\n", m);
return 0;
}
Хорошо, благодарю вас всех за исправление моих ошибок, но проблема все еще не решена. Я могу напечатать все значения внутри, но за пределами цикла он печатает только последнее значение набора данных, есть ли какое-то точное решение для этого? Я гугл в течение нескольких часов, но пока не успел. код выглядит следующим образом>
#include <stdlib.h>
#include <stdio.h>
#include <flt2fr.h>
#include<fract_math.h>
#include <math_bf.h>
#include <complex.h>
#include <filter.h>
int main()
{
int n = 1024;
long int dat1[n];
FILE *file1;
fract16 *m;
file1 = fopen("0.dat", "r");
if (file1 == NULL) {
printf("I couldn't open 0.dat for reading.\n");
exit(0);
}
while(!feof(file1))
{
fgets(dat1,n,file1);
sscanf(dat1, "%f", &m);
printf("%f\n",m); //Prints all elements in the 1st column of the array, 0.dat is a nx2 matrix
}
fclose(file1);
}
Добро пожаловать в переполнение стека! См. [Почему »while (! Feof (файл))« всегда неправильно? »(Http://stackoverflow.com/q/5431941/2173917) –
Проверьте возвращаемое значение' fgets (dat1, n, file1) ' перед использованием 'dat1' – chux
Зависит от того, что в вашем файле я предполагал, но это, скорее всего, утечка памяти. Сколько раз вы пробиваете цикл while? Сохраняется только указатель на последний 'malloc'. – yano