プログラミングに自信あるやつ助けてください

1 : 2022/02/28(月) 11:56:32.313 ID:GvEe6aeb0
double* data = new double[1500];
float length = 400;
float* a = new float[length];
int center = length / 2;
float* p = a + center – 10;

コンパイル時にエラーは出ないんだけど
実行すると落ちるって状態で
この部分の最後の行をコメントアウトすると落ちなくなる

2 : 2022/02/28(月) 11:56:53.235 ID:GvEe6aeb0
正直ポインタが未だに理解できてない
3 : 2022/02/28(月) 11:57:44.876 ID:sLhpLXIb6
pってどこの領域指してるの?
6 : 2022/02/28(月) 11:58:39.582 ID:GvEe6aeb0
>>3
領域がなんなのかもよくわからない
4 : 2022/02/28(月) 11:58:07.720 ID:GvEe6aeb0
毎回落ちるってわけじゃなく
落ちるときと落ちないときがある

落ちるときは必ず落ちるんだけど
全く内容を変えずにビルドし直すと落ちなくなったりしてよくわからない

5 : 2022/02/28(月) 11:58:21.319 ID:bGE1rhuh0
実行したけど落ちない

お前の環境が悪いんじゃね

7 : 2022/02/28(月) 11:59:07.603 ID:sLhpLXIb6
あああっているのか
8 : 2022/02/28(月) 12:00:14.089 ID:WYq19Bpd0
何語?
13 : 2022/02/28(月) 12:02:37.078 ID:GvEe6aeb0
>>8
c++
9 : 2022/02/28(月) 12:00:43.984 ID:Ug+HFOvm0
ああここが狂ってる
float length = 400;
float* a = new float[length];

直しとけ

11 : 2022/02/28(月) 12:01:30.914 ID:GvEe6aeb0
>>9
何がおかしいの?
14 : 2022/02/28(月) 12:07:43.390 ID:ls5w+3j90
>>11
変数を0.5個確保とかできないから添え字は絶対に整数
10 : 2022/02/28(月) 12:00:45.835 ID:GvEe6aeb0
for (int i = 0; i < 1500; ++i, ++p){}

ごめん
これが抜けてた
forの中身を全部コメントアウトしても変わらないから
pを増やしていくと落ちることがあるって感じだと思う

12 : 2022/02/28(月) 12:02:33.589 ID:sLhpLXIb6
>>10
400個しか無いところに何やってるの?
15 : 2022/02/28(月) 12:07:47.269 ID:GvEe6aeb0
>>12
超えたらまずいの?
19 : 2022/02/28(月) 12:09:52.386 ID:sLhpLXIb6
>>15
まずく無いかもね
40 : 2022/02/28(月) 12:25:17.406 ID:4ybK8Dfdd
>>15
セグメンテーションフォルトが出るやろ
16 : 2022/02/28(月) 12:08:07.593 ID:7ZTz2m3g0
for (int i = 0; i < 1500; ++i, ++p){
printf("%c%c%c%c\n",0x55,0x6e,0x6b,0x6f);
}

これかな

17 : 2022/02/28(月) 12:08:56.149 ID:ls5w+3j90
あと a は配列だから a + ホニャララ もできない
20 : 2022/02/28(月) 12:12:05.588 ID:J96tYHoka
>>17
え、最近のC++ってポインタへの加算できなくなったの?
21 : 2022/02/28(月) 12:14:23.302 ID:sLhpLXIb6
>>17
aは配列じゃないから変更可能
18 : 2022/02/28(月) 12:09:10.292 ID:F+qAquqv0
pが190番目くらいからスタートしてるでしょ
それをforループで1500回回したら401番目から先はバッファオーバーランになるじゃん
forループの中でiをprintしてみ
途中で落ちるから
26 : 2022/02/28(月) 12:18:08.484 ID:ucqDwkIta
>>18の言ってることを理解しようぜ
これが問題の本質だから
22 : 2022/02/28(月) 12:14:40.120 ID:Xeo2lxBF0
まず配列でなんで要素数がfloat
23 : 2022/02/28(月) 12:16:17.784 ID:GvEe6aeb0
if( sizeof(p) / sizeof(int) >1500){
for (int i = 0; i < 1500; ++i, ++p){}
else{
for (int i = 0; i < sizeof(p) / sizeof(int); ++i, ++p){}
}}

こうすれば大丈夫かな?

31 : 2022/02/28(月) 12:18:37.944 ID:sLhpLXIb6
>>23
pは配列じゃなくてポインタで定義してるから、sizeof(p)は配列バイト数じゃなくてsizeof(float*)の4とか8とかが返る
32 : 2022/02/28(月) 12:20:28.470 ID:GvEe6aeb0
>>31
配列の数を調べるにはどうすればいいの?
33 : 2022/02/28(月) 12:21:32.396 ID:sLhpLXIb6
>>32
別に領域オーバーしても動く処理系なんだから気にしなくていいんじゃないの?
34 : 2022/02/28(月) 12:23:12.884 ID:GvEe6aeb0
>>33
落ちる原因は別にあるってこと?
38 : 2022/02/28(月) 12:24:41.611 ID:fVp5obC70
>>32
調べるもクソも自分が固定長で宣言してるじゃねぇか!
24 : 2022/02/28(月) 12:17:32.204 ID:GvEe6aeb0
駄目だ
落ちた
25 : 2022/02/28(月) 12:17:46.206 ID:fVp5obC70
バカじゃねぇの
確保してるメモリ確実に超えるじゃん
何がしたいのかも分からないし
まずは基礎を理解してから質問しろよ
27 : 2022/02/28(月) 12:18:11.728 ID:J96tYHoka
まずdouble* dataが使われてないことに気付いてほしい
28 : 2022/02/28(月) 12:18:19.669 ID:Ug+HFOvm0
よくわかんねーけど
float length = 400;をintにすれば良いんじゃねえの
29 : 2022/02/28(月) 12:18:24.871 ID:l43BIxy4d
ネタな気がしてきて
30 : 2022/02/28(月) 12:18:27.238 ID:HIe+k757a
俺Python使い、意味不明
35 : 2022/02/28(月) 12:23:55.749 ID:4ybK8Dfdd
centerはint型なのにfloatに足していいの?
浮動小数点数型と整数型じゃ値の保持方法全く違うよ
36 : 2022/02/28(月) 12:24:10.886 ID:1guKYhgl0
c++難しいからJavaかPythonやろうぜ(ベストアンサー)

コメント

タイトルとURLをコピーしました