В приведенном ниже коде отображается окно окна размера окна и сдвигается окно с помощью некоторых выборок shiftSize на каждой итерации.Часть кода, вызывающая ошибку сегментации
Я сделал необычную «отладку» printf() и получил, что код дает ошибку при ошибке сегментации. Может кто-нибудь сказать мне, что такое ошибка?
Заранее благодарен!
Код:.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <tgmath.h>
int main()
{
FILE *fp, *in ;
in = fopen ("controlFile.txt", "r");
if (in == NULL) {
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}
char equalTo, commandType[20];
int commands[3]; int i=0;
while (!feof(in)){
fscanf(in, "%s %c %d\n", commandType, &equalTo, &commands[i]);
printf("%s %c %d\n", commandType, equalTo, commands[i]);
i++;
}
fclose(in);
fp = fopen ("OriginalData.txt", "r");
if (fp == NULL) {
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}
//Note: time is milliseconds. Therefore, multiplying factor is 1000
int mulFactor =1000;
int samplesPerSecond = commands[0];
int windowSize = floor((commands[1]*mulFactor)/samplesPerSecond); //This will be our array size or rank for cuda Program
int shiftSize = floor ((commands[2]*mulFactor)/samplesPerSecond);
int fileCounter = 0, breakFlag=0;
int allocationSize = 100;
float *values, test;
values = (float*) malloc (100*sizeof(float));
if (values==NULL)
{
printf("Error allocating memory!");
exit (1);
}
int localCounter = 0;
int arrayCounter = 0;
int copyCounter = windowSize - shiftSize;
// printf("SamplesPerSecond: %d\n windowSize: %d\n shiftSize: %d\n copyCounter: %d\n", samplesPerSecond, windowSize, shiftSize, copyCounter);
int temp;
float* check;
while (!feof(fp)){
localCounter = 0;
if (fileCounter==0){
while (!feof (fp) && localCounter!=windowSize){
fscanf(fp, "%f", &values[arrayCounter]);
printf("%f\n", values[arrayCounter]);
localCounter++;
fileCounter++;
arrayCounter++;
//printf("%f\n", values[arrayCounter]);
if (sizeof(values)/sizeof(float)==arrayCounter-1){
values = (float*)realloc (values, (size_t)(allocationSize*sizeof(float)));
if (values==NULL){
printf("Cannot allocate memory\n");
exit(1);
}
}
}
}
else{
temp = copyCounter;
// printf("Here\n");
while (temp!=0 && !feof(fp)){
//if (feof(fp)) {printf ("Been Here\n");breakFlag = 1; break;}
values[arrayCounter] = values [arrayCounter-copyCounter];
printf("%f\n", values[arrayCounter]);
temp--;
arrayCounter++;
localCounter++;
if (sizeof(values)/sizeof(float)==arrayCounter-1){
values= (float*)realloc (values, allocationSize*sizeof(float));
if (values==NULL){
printf("Cannot allocate memory\n");
exit(1);
}
}
}
while (localCounter!=windowSize && !feof(fp)){
fscanf(fp, "%f", &values[arrayCounter]);
printf("%f\n", values[arrayCounter]);
localCounter++;
fileCounter++;
arrayCounter++;
if (sizeof(values)/sizeof(float)==arrayCounter-1){
values= (float*)realloc (values, allocationSize*sizeof(float));
if (values==NULL){
printf("Cannot allocate memory\n");
exit(1);
}
}
}
}
}
fclose(fp);
//int numOfFrames = floor((fileCounter-1)/shiftSize); //Count the number of lines when fp is increasing
//int j;
/* for(j=0; j<(sizeof(values)/sizeof(float)); j++){
printf ("%f\n", values[j]);
}
*/
return 0;
}
Хммм ... вы не смогли бы отбросить код до минимума, необходимого для отображения ошибки? Мне действительно не хочется проходить через все это, чтобы найти точку, где это происходит неправильно ... – DevSolar
Проверять команды int [i], когда вы делаете i ++ из-за определения int commands [3]; – duDE
Почему ваш первый цикл while while не ограничен? Вы можете получить доступ к элементам для тех массивов, которые находятся за пределами границ. – PaulMcKenzie