質問編集履歴

2

修正

2021/03/05 01:50

投稿

Anfaenger
Anfaenger

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,16 @@
1
1
  下記プログラムにてヒープは壊れていますとエラーが出ます。
2
2
 
3
+ (修正:現在は「読み取り中にアクセス違反が発生」と表示されます)
4
+
3
- メモリ動的確保したことが失敗の原因だと思うのですが、メモリの扱いが初心者で
5
+ 配列xS_fftのakに渡すきにサイズを超えている(?)のが原因だと思うのですが、
4
-
6
+
5
- 原因を特定できません。ヒントをください。
7
+ 対処法が分かりません。ヒントをください。
6
8
 
7
9
  エラー箇所はmain関数内の三番目のfor文の中です。
8
10
 
9
11
  #エラー内容
10
12
 
11
- ハンドルされない例外が 0x77C7FC3D (ntdll.dll) で発生しました(WAVFFT.exe 内): 0xC0000374: ヒープは壊れています。 (パラメーター: 0x77CBB960)
13
+ ハンドルされない例外が 0x77BF0F01 (ntdll.dll) で発生しました(WAVFFT02.exe 内): 0xC0000005: 場所 0x000010A5 の読み取り中にアクセス違反が発生しました
12
14
 
13
15
  ```C++
14
16
 
@@ -84,7 +86,7 @@
84
86
 
85
87
  double* data;
86
88
 
87
- FILE* audio = fopen("mansample.wav", "rb");
89
+ //FILE* audio = fopen("sinwave.wav", "rb");
88
90
 
89
91
  FILE* txt = fopen("mansample.txt", "w");
90
92
 
@@ -114,7 +116,7 @@
114
116
 
115
117
  if (x != NULL && y != NULL) {
116
118
 
117
- // x = audio_read(&prm_in, fn);
119
+ // x = audio_read(&prm_in, fn);
118
120
 
119
121
  y[i] = 0.0;
120
122
 
@@ -130,6 +132,10 @@
130
132
 
131
133
 
132
134
 
135
+ printf("Size of Data : %d\n", sizeof *x);
136
+
137
+
138
+
133
139
  S_fft(x, y, N, -1);
134
140
 
135
141
 
@@ -144,9 +150,9 @@
144
150
 
145
151
  // 計算結果をファイルに格納
146
152
 
147
-
148
-
153
+
154
+
149
- for (i = 0; i < N; i++) {
155
+ for (i = 0; i < N / 2; i++) {
150
156
 
151
157
  if (x != NULL && y != NULL) {
152
158
 
@@ -158,7 +164,7 @@
158
164
 
159
165
  //printf("%f = %d / (%f * %d)\n", fq, i, dt, N);
160
166
 
161
- fprintf(txt, "%fHz %d\n", fq, pw); /* エラー箇所 */
167
+ fprintf(txt, "%fHz %d\n", fq, pw); // エラー箇所
162
168
 
163
169
  }
164
170
 
@@ -166,7 +172,7 @@
166
172
 
167
173
  //fclose(fp);
168
174
 
169
- fclose(audio);
175
+ //fclose(audio);
170
176
 
171
177
  fclose(txt);
172
178
 
@@ -198,10 +204,18 @@
198
204
 
199
205
  double s, sc, c, a0, b0, tmp;
200
206
 
207
+
208
+
201
209
  for (i = 0; i < n; i++) rot[i] = 0;
202
210
 
203
211
 
204
212
 
213
+ //ak = (double*)malloc(sizeof(double) * N);
214
+
215
+ //bk = (double*)malloc(sizeof(double) * N);
216
+
217
+
218
+
205
219
  nhalf = n / 2; num = n / 2; sc = 2.0 * PI / n;
206
220
 
207
221
  while (num >= 1) {
@@ -216,7 +230,7 @@
216
230
 
217
231
  k1 = k + num;
218
232
 
219
- if (ak != NULL) {
233
+ if (ak != NULL && bk != NULL) {
220
234
 
221
235
  a0 = ak[k1] * c - bk[k1] * s;
222
236
 
@@ -238,7 +252,7 @@
238
252
 
239
253
  }
240
254
 
241
- if (ff < 0 && ak != NULL) {
255
+ if (ff < 0 && ak != NULL && bk != NULL) {
242
256
 
243
257
  for (i = 0; i < n; i++) {
244
258
 
@@ -252,7 +266,7 @@
252
266
 
253
267
  for (i = 0; i < n - 1; i++) {
254
268
 
255
- if ((j = rot[i]) > i && ak != NULL) {
269
+ if ((j = rot[i]) > i && ak != NULL && bk != NULL) {
256
270
 
257
271
  tmp = ak[i]; ak[i] = ak[j]; ak[j] = tmp;
258
272
 
@@ -418,7 +432,9 @@
418
432
 
419
433
 
420
434
 
421
- fread(&data_size, 4, 1, fp);
435
+ //fread(&data_size, 4, 1, fp);
436
+
437
+ fread(&data_size, sizeof(unsigned char), 4, fp);
422
438
 
423
439
 
424
440
 

1

誤字

2021/03/05 01:49

投稿

Anfaenger
Anfaenger

スコア14

test CHANGED
File without changes
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
  sc = 2.0 * PI * dt;
112
112
 
113
- for (i = 0; i < N; i++) { // 1Hzに60Hzのノイズが重なった波形の例
113
+ for (i = 0; i < N; i++) {
114
114
 
115
115
  if (x != NULL && y != NULL) {
116
116
 
@@ -158,7 +158,7 @@
158
158
 
159
159
  //printf("%f = %d / (%f * %d)\n", fq, i, dt, N);
160
160
 
161
- fprintf(txt, "%fHz %d\n", fq, pw);
161
+ fprintf(txt, "%fHz %d\n", fq, pw); /* エラー箇所 */
162
162
 
163
163
  }
164
164