質問編集履歴

2

各関数の用途と問題箇所をコード中に記載しました。

2023/04/19 11:02

投稿

yu_89
yu_89

スコア34

test CHANGED
File without changes
test CHANGED
@@ -31,7 +31,7 @@
31
31
  return K;
32
32
  }
33
33
 
34
- 上記のコードのように自作関数で配列を返して、main関数で変数に代入してその変数を用いて後の計算を行いたいのですが、コアダンプして上手くいきません。改善策の検討がつかないのですが、か分かる方、ご教授いただけないでしょうか?詳しいコードは下記の通りです。C言語1がメインのコード、C言語2が入力ファイルを作るコードです。
34
+ 上記のコードのように自作関数で配列を返して、main関数で変数に代入してその変数を用いて後の計算を行いたいのですが、コアダンプして上手くいきません。改善策の検討がつかないのですが、どなたか分かる方、ご教授いただけないでしょうか?詳しいコードは下記の通りです。C言語1がメインのコード、C言語2が入力ファイルを作るコードです。
35
35
  よろしくお願いいたします。
36
36
  ### 発生している問題・エラーメッセージ
37
37
 

1

各関数の用途を記載しました。

2023/04/19 10:58

投稿

yu_89
yu_89

スコア34

test CHANGED
File without changes
test CHANGED
@@ -60,23 +60,22 @@
60
60
 
61
61
  char datar[256], datai[256];
62
62
 
63
- float ar1[N], ai1[N], ar2[N], ai2[N];
63
+ float ar1[N], ai1[N];
64
-
64
+
65
- double tempr1[N], tempi1[N], tempr2[N], tempi2[N];
65
+ double tempr1[N], tempi1[N];
66
66
 
67
67
  double pwr1, pwi1;
68
68
 
69
69
  double dcnt[N];
70
70
 
71
- double S1r1[N], S2r1[N], S3r1[N], S4r1[N], S6r1[N];
71
+ double S1r1[N], S2r1[N], S3r1[N], S4r1[N];
72
72
  double S1i1[N], S2i1[N], S3i1[N], S4i1[N];
73
- double Myu1r1[N], Myu2r1[N], Myu3r1[N], Myu4r1[N], Myu6r1[N];
73
+ double Myu1r1[N], Myu2r1[N], Myu3r1[N], Myu4r1[N];
74
74
  double Myu1i1[N], Myu2i1[N], Myu3i1[N], Myu4i1[N];
75
- double M1r[N], M2r[N], M3r[N], M4r[N], M1a[N], M2a[N], M3a[N], M4a[N];
75
+ double M1r[N], M2r[N], M3r[N], M4r[N];
76
- double M1i[N], M2i[N], M3i[N], M4i[N], M1b[N], M2b[N], M3b[N], M4b[N];
76
+ double M1i[N], M2i[N], M3i[N], M4i[N];
77
77
 
78
78
  double* K = NULL;
79
- double Kr[N], Ki[N];
80
79
 
81
80
  FILE *fp, *fp1, *fp2, *fp3;
82
81
 
@@ -96,9 +95,6 @@
96
95
  {
97
96
  ar1[i] = 0.0;
98
97
  ai1[i] = 0.0;
99
-
100
- Kr[i] = 0.0;
101
- Ki[i] = 0.0;
102
98
 
103
99
  M1r[i] = 0.0;
104
100
  M1i[i] = 0.0;
@@ -117,14 +113,11 @@
117
113
  S3i1[i] = 0.0;
118
114
  S4r1[i] = 0.0;
119
115
  S4i1[i] = 0.0;
120
- S6r1[i] = 0.0;
121
116
 
122
117
  dcnt[i] = 0.0;
123
118
 
124
119
  tempr1[i] = 0.0;
125
120
  tempi1[i] = 0.0;
126
- tempr2[i] = 0.0;
127
- tempi2[i] = 0.0;
128
121
 
129
122
  Myu1r1[i] = 0.0;
130
123
  Myu1i1[i] = 0.0;
@@ -134,7 +127,6 @@
134
127
  Myu3i1[i] = 0.0;
135
128
  Myu4r1[i] = 0.0;
136
129
  Myu4i1[i] = 0.0;
137
- Myu6r1[i] = 0.0;
138
130
  }
139
131
 
140
132
  pwr1 = 0.0;
@@ -152,12 +144,6 @@
152
144
  {
153
145
  printf("\rProcessing %10d th frame",n+1);
154
146
 
155
-
156
- /* for(i = 0; i < N; i++)
157
- {
158
- fread(&ar1[i], sizeof(float), 1, fp1);
159
- fread(&ai1[i], sizeof(float), 1, fp1);
160
- }*/
161
147
 
162
148
  for(i = 0; i < N; i++)
163
149
  {
@@ -205,8 +191,6 @@
205
191
  S4r1[i] += pow((double)pwr1, 4.0);
206
192
  S4i1[i] += pow((double)pwi1, 4.0);
207
193
 
208
- S6r1[i] += pow((double)pwr1, 6.0);
209
-
210
194
  dcnt[i] += 1.0;
211
195
  }
212
196
  }
@@ -228,11 +212,9 @@
228
212
 
229
213
  Myu4r1[i] = S4r1[i] / dcnt[i];
230
214
  Myu4i1[i] = S4i1[i] / dcnt[i];
231
-
232
- Myu6r1[i] = S6r1[i] / dcnt[i];
233
- }
215
+ }
234
-
216
+
235
- K = Kurtosis(Myu1r1, Myu2r1, Myu3r1, Myu4r1, N);
217
+ K = Kurtosis(Myu1r1, Myu2r1, Myu3r1, Myu4r1, N); //エラーがでる箇所
236
218
  for(i = 0; i < N; i++)
237
219
  printf("%f\n", K[i]);
238
220
 
@@ -241,7 +223,8 @@
241
223
  return 0;
242
224
 
243
225
  }
226
+
244
-
227
+ //FFTの計算
245
228
  int fft1(ar,ai,n,iter,flag)
246
229
  float ar[],ai[];
247
230
  int n, iter, flag;
@@ -349,7 +332,7 @@
349
332
  return(0);
350
333
  }
351
334
 
352
-
335
+ //窓関数の処理を行う関数
353
336
  int window_func(frame,n)
354
337
  float frame[];
355
338
  int n;
@@ -375,6 +358,7 @@
375
358
  return(0);
376
359
  }
377
360
 
361
+ //問題としている自作関数
378
362
  double* Kurtosis(double Myu1[], double Myu2[], double Myu3[], double Myu4[], int N)
379
363
  {
380
364
  int i;
@@ -382,8 +366,6 @@
382
366
  double top[N], bottom[N];
383
367
  double* K = (double*)malloc(N);
384
368
 
385
-
386
-
387
369
  for(i = 0; i < N; i++)
388
370
  {
389
371
  M1[i] = 0.0;