発生している問題
freadにNULLが入力されエラーが発生する。
エラー個所は下記のソースコードにおいて、『今回のエラー部分』というコメントアウトで覆った部分です。
※長くなるのでヘッダーなどのソースコードは省略させてもらいました。
なお、前回の質問のほうに省略されたヘッダ-は記載してあります。
該当のソースコード
C++
1 2int main() 3{ 4 SpParam sp; 5 WrSWaveFileHeader wHdr; 6 long totalLength; 7 8 unsigned long sampRate; 9 unsigned short sampBits; 10 long posOfData, sizeOfData; 11 12 FILE *fpS1,*fpS2; 13 errno_t err; 14 15 16 char filename1[200], filename2[200]; 17 18 19 printf("比較するwavの名前を入れてください。\n"); 20 scanf_s("%s", filename1,200); 21 22 23 err = fopen_s(&fpS1, "soukanyou1.wav", "rb"); 24 if (err != 0) 25 { 26 fprintf(stderr, "%s をオープンできません.\n", filename1); 27 getchar(); 28 exit(EXIT_FAILURE); 29 } 30 31 // エラー確認兼ねるインプットしたWAVファイルのヘッダーの読み込み 32 if (wavHdrRead(&*fpS1, &sampRate, &sampBits, &posOfData, &sizeOfData) != 0) //FILE型の中身はunsigned char。 33 return -1; 34 35 fseek(fpS1, posOfData, SEEK_SET); 36 37 short *InS1; 38 InS1 = (short*)malloc(sizeOfData);//sizeofはそれの大きさ 39 40////////////////////今回のエラー部分///////////////////// 41 if (fread(InS1, sizeOfData, 1, fpS1) != 1) 42 return -1; 43///////////////////////////////////////////////////////// 44 45 46 printf("比較元のwavの名前を入れてください。\n"); 47 scanf_s("%s", filename2, 200); 48 49 err = fopen_s(&fpS2, "soukanyou2.wav", "rb"); 50 if (err != 0) 51 { 52 fprintf(stderr, "%s をオープンできません.\n", filename2); 53 getchar(); 54 exit(EXIT_FAILURE); 55 } 56 57 //エラー確認兼ねるインプットしたWAVファイルのヘッダーの読み込み 58 if (wavHdrRead(&*fpS2, &sampRate, &sampBits, &posOfData, &sizeOfData) != 0) //FILE型の中身はunsigned char。 59 return -1; 60 61 fseek(fpS2, posOfData, SEEK_SET); 62 63 short *InS2; 64 InS2 = (short*)malloc(sizeOfData); 65 66 if (fread(InS2, sizeOfData, 1, fpS2) != 1) 67 return -1; 68 69 int i, k; 70 71 short *soukan; 72 soukan = (short*)malloc(sizeof(sizeOfData)); 73 74 for (k = 0; k < 16000; k++)//sizeOfData - i 75 { 76 for (i = 0; i < 16000; i++) 77 { 78 soukan[k] = soukan[k] + InS1[i] * InS2[i + k]; 79 } 80 81 } 82 83 //相関関数soukan[k]の最大値を探す。 84 85 int j; 86 short soukanMax; 87 soukanMax = 0; 88 89 for (j = 0; j < 16000; j++) 90 { 91 if (soukanMax < soukan[j]) 92 soukanMax = soukan[j]; 93 } 94 95 printf("相関関数の値は %d 。\n", soukanMax); 96 97 return 0; 98 99 free(InS1); 100 free(InS2); 101 102 103 104 fclose(fpS1); 105 fclose(fpS2); 106 107 char cheak; 108 109 scanf_s("%s", cheak, 200); 110 111 return 0; 112} 113
以下、エラー直前の自動変数
+ InS1 0xcccccccccccccccc {???} short * + fpS1 0x0000020c7a493500 {_Placeholder=0x0000000000000000 } _iobuf * fseek 0x00007ff6b9f162b6 {Soukan.exe!fseek} void * malloc 0x00007ff6b9f162e0 {Soukan.exe!malloc} void * posOfData 44 long sizeOfData 64000 long
補足
前回の質問を顧みて、メイン関数から直接プログラムを繋げエラーの原因を探してみたところ、そもそもfreadに渡す値に何らかの誤りがあるようだと判明しました。しかし、そこから進むことができなくなってしまったので、コードミスや基礎的な間違いでもいいので、指摘してもらえたらありがたいです。
どのようなエラーメッセージが出ますか?
回答1件
あなたの回答
tips
プレビュー