のようになっています。出ああああああああああああああああああああ
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
2022/01/03 00:48
変更いたしました。よろしくお願いいたします。
回答1件
0
ベストアンサー
kの範囲ですが-N/2からN/2-1
gr[k]=sum;
gr[0~31] しか確保されていないメモリについて gr[-16] としてアクセスしているのがエラーの原因かと。
投稿2022/01/02 14:51
総合スコア4648
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/03 00:53
すみません。どのようにgrに-16~15でメモリを確保すればいいのでしょうか?
2022/01/03 01:01
gr = (float*)malloc(sizeof(float)*N) + N/2;
2022/01/03 01:31
すみません。試したのですが出力結果は変わりませんでした。
munmap_chunk(): invalid pointer
Aborted (core dumped)
のコードが出てしまいます泣
お時間がございましたらアドバイスの方をよろしくお願いいたします。
2022/01/03 02:50
gr[-16] でアクセスする(領域外のメモリにアクセスする)イメージは下記が参考になるかと思います。
■ 初心に戻り、C言語のポインタについて考える
https://qiita.com/developer-kikikaikai/items/0910c3c96e2164094449
> メモリ領域が用意されていないアドレスにアクセスすると、プログラムが落ちます。
したがって、gr[-16~15] でなく gr[0~31] の範囲(確保されたメモリ領域)でアクセスする必要があります。
修正案としては、計算時に「-16」するか、格納・表示時に「+16」する、といった感じでしょうか。
■ 案1(for文の範囲を「0~31」にして、計算時に「-16」する)
for(k=0;k<N;k++)
{
sum+=g[i]*cos((float)2*M_PI*i*(k-N/2)/N);
}
■ 案2(for文の範囲は「-16~15」のままで、gr に格納・表示時に「+16」する)
gr[k+N/2]=sum;
printf("%f\n",gr[k+N/2]);
2022/01/03 04:48
案2を用いてしたのですがエラーは消えました!
出力結果の-0.00の-の部分を消すにはどうすればいいのでしょうか?消すことはできますか?
2022/01/03 06:16
> 出力結果の-0.00の-の部分を消すにはどうすればいいのでしょうか?消すことはできますか?
現状、計算結果が0ゼロではない為に「-」の表記が付いています。(例:-8e-08)
多少強引ですが指定した数よりも小さい場合にゼロとみなすというような条件を加えることで「-」を消すことは可能です。(バッドノウハウかもしれません。)
printf() の書式だけでは対処できないような気がします。(自分が知らないだけかもしれないですが・・)
<表記をそろえるために加工した場合の例>
printf("%8.5f %5.1f %5.1f %5.1f\n",
f[k + N / 2],
fabs(gr[k + N / 2]) < 0.1 ? 0.0 : gr[k + N / 2],
fabs(gi[k + N / 2]) < 0.1 ? 0.0 : gi[k + N / 2],
fabs(G[k + N / 2]) < 0.1 ? 0.0 : G[k + N / 2]);
2022/01/03 06:44
>現状、計算結果が0ゼロではない為に「-」の表記が付いています。(例:-8e-08)
そのような理由でしたか!本当にありがとうございました。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。