質問編集履歴
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
下記プログラムにてヒープは壊れていますとエラーが出ます。
|
2
2
|
|
3
|
+
(修正:現在は「読み取り中にアクセス違反が発生」と表示されます)
|
4
|
+
|
3
|
-
|
5
|
+
配列xをS_fftのakに渡すときにサイズを超えている(?)のが原因だと思うのですが、
|
4
|
-
|
6
|
+
|
5
|
-
|
7
|
+
対処法が分かりません。ヒントをください。
|
6
8
|
|
7
9
|
エラー箇所はmain関数内の三番目のfor文の中です。
|
8
10
|
|
9
11
|
#エラー内容
|
10
12
|
|
11
|
-
ハンドルされない例外が 0x77
|
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("
|
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
誤字
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++) {
|
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
|
|