輸入文件是in.wav
。我必須讀取塊(成功),並閱讀示例來規範化音頻文件...在查找陣列中的元素時應用程序崩潰
問題是,它試圖啓動max
和min
值的.wav文件的示例時崩潰。 它只會找到陣列中的最小值和最大值,但是它崩潰了 ...
告訴我什麼是錯的,請。我沒有看到這種行爲的理由。
下面是代碼:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#define hdr_SIZE 64
typedef struct FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
} fmt;
typedef struct DATA
{
char Subchunk2ID[4];
int Subchunk2Size;
int Data[441000];
} data;
typedef struct HEADER
{
char ChunkID[4];
int ChunkSize;
char Format[4];
fmt S1;
data S2;
} header;
int main()
{
FILE *input = fopen("in.wav", "rb"); /// nameIn
if(input == NULL)
{
printf("Unable to open wave file (input)\n");
exit(EXIT_FAILURE);
}
FILE *output = fopen("out.wav", "wb"); /// nameOut
header hdr;
fread(&hdr, sizeof(char), hdr_SIZE, input);
/* NOTE: Chunks has been copied successfully. */
char *ptr;
long n = hdr.S2.Subchunk2Size;
/// COPYING SAMPLES...
ptr = malloc(sizeof(n));
fread(ptr, 1, n, input);
int min = ptr[0], max = ptr[0], i;
/* THE PROBLEM IS HERE: */
for (i = 0; i <= n; i++) // Finding 'max' and 'min'.
{
if (ptr[i] < min)
min = ptr[i];
if (ptr[i] > max)
max = ptr[i];
}
printf("> > >%d__%d\n", min, max); // Displaying of 'min' and 'max'.
fclose(input);
fclose(output);
return 0;
}
爲什麼它的行爲本身這麼奇怪?
編輯您的代碼:爲(I = 0; I
mojtaba
2013-05-09 20:05:08
相當好評,但它並沒有幫助解決問題。 – yulian 2013-05-09 20:12:44