メンバの間接参照について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
チルチル

メンバの間接参照について

#1

投稿記事 by チルチル » 16年前

malloc関数で確保した構造体に対して

p->x+cos(p->Angle+PI)*(p->Length/2)+cos(p->Angle+PI/2)*(p->Width/2);

のような処理を行うと強制終了してしまいます

float x1=cos(p->Angle+PI)*(p->Length/2);
float x2=cos(p->Angle+PI/2)*(p->Width/2);
p->x+x1+x2;

のように分けたりすると大丈夫なのですが・・

何か思い当たる事はないでしょうか?

C++ DXライブラリを使用しています

box

Re:メンバの間接参照について

#2

投稿記事 by box » 16年前

> p->x+cos(p->Angle+PI)*(p->Length/2)+cos(p->Angle+PI/2)*(p->Width/2);
>
> のような処理を行うと強制終了してしまいます

強制終了してしまうプログラムのソースコードすべてを載せていただけますか?

ところで、

> p->x+cos(p->Angle+PI)*(p->Length/2)+cos(p->Angle+PI/2)*(p->Width/2);

も、分割した

> p->x+x1+x2;

これも、演算結果をどこにも代入していません。それでよいのでしょうか?
本題と直接関係はありませんが、気になります。

チルチル

Re:メンバの間接参照について

#3

投稿記事 by チルチル » 16年前

ソースコードは約1万行あるので全部乗せるのは無理でしょうね・・
肝心な部分だけ抜き出してみましょうかね・・

代入を行っていないのは、代入するから強制終了するのか、式に問題があるのかを判断するためです
どうも式に問題があるようですね・・

ねこ

Re:メンバの間接参照について

#4

投稿記事 by ねこ » 16年前

落ちる時の各値チェックしたら良いんじゃないの?
malloc部分も構造体も書かないんじゃ分からないよ。

チルチル

Re:メンバの間接参照について

#5

投稿記事 by チルチル » 16年前

各値チェックですか・・
DrawFormatString関数とWaitKey関数でやってみます
少々お待ちください

バグ

Re:メンバの間接参照について

#6

投稿記事 by バグ » 16年前

そんな手の込んだ事しなくても、問題のありそうなところにブレイクポイントを置いて、値を確認すればいいだけかと…

チルチル

Re:メンバの間接参照について

#7

投稿記事 by チルチル » 16年前

ん?ブレイクポイントとは何でしょうか?

値を確認する前に怪しい所をコメントアウトしてみたら
なぜかmalloc関数で確保したVERTEX構造体配列
Vertex[i*6+3]とVertex[i*6+1]の一部のメンバに値を代入すると強制終了しました
他は大丈夫みたいなんですけど・・

初級者

Re:メンバの間接参照について

#8

投稿記事 by 初級者 » 16年前

ブレークポイント
ブレイクポイント

あたりのキーワードでググってみましょう。

チルチル

Re:メンバの間接参照について

#9

投稿記事 by チルチル » 16年前

調べてみるとBorlandの場合は別にソフトが必要のようですね
私の場合は先輩の環境をコピーしたのでBorlandが展開されている場所もわからないし
以前によくわからないまま同じような事をやった時に開発環境が異常を起こした事があったので
パッと導入するのは無理ですね・・

あと何でか分からないんですが
malloc宣言部
VERTEX *Vertex=(VERTEX*)malloc(sizeof(VERTEX)*(6*(abs(P->DrawType)==1)?Unit:Sum));を
VERTEX *Vertex=(VERTEX*)malloc(sizeof(VERTEX)*1000);に変更すると見た感じうまく行きました
もしかしたら領域確保に失敗してるのかもしれません
なぜかVERTEX Vertex[1000];ではうまく行きませんでしたが・・

チルチル

Re:メンバの間接参照について

#10

投稿記事 by チルチル » 16年前

さらに試行錯誤すると
VERTEX *Vertex=(VERTEX*)malloc(sizeof(VERTEX)*(6*(abs(P->DrawType)==1)?Unit:Sum));を
VERTEX *Vertex=(VERTEX*)malloc(sizeof(VERTEX)*(6*((abs(P->DrawType)==1)?Unit:Sum)));に変えると
うまく動きました
条件演算子の優先度が原因だったのでしょうか・・
見たところ問題解決したようなので
もう少し試行錯誤して強制終了しないか調べてみます

チルチル

Re:メンバの間接参照について

#11

投稿記事 by チルチル » 16年前

調べた結果、やはり条件演算子の優先度が原因でした
お騒がせしてすみません
どうもありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る