動的確保がうまく行かない

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

動的確保がうまく行かない

#1

投稿記事 by bonbo » 12年前

すみません、一つ質問が解決していないのですが
動的確保についてあまり理解が済んでいなかったのか、
うまくいかないところが生じてしまったので質問させていただきます。

コード:

int count =10;
GLfloat *squareVertices=new GLfloat(count*8);
for (int vert=0; vert<count; vert++) {
                squareVertices[(vert)*8+0]=vert*10      ;squareVertices[(vert)*8+1]=0 ;
                squareVertices[(vert)*8+2]=vert*10+width;squareVertices[(vert)*8+3]=0 ;
                squareVertices[(vert)*8+4]=vert*10      ;squareVertices[(vert)*8+5]=10;
                squareVertices[(vert)*8+2]=vert*10+width;squareVertices[(vert)*8+7]=10;
            }
これだけなのですが、エラーがおこってしまいます。
NSLog(@"%f",(GLfloat *)squareVertices);
で、チェックすると
nan
がかえってきてしまいます。
どこがおかしいのでしょうか。

bonbo

Re: 動的確保がうまく行かない

#2

投稿記事 by bonbo » 12年前

忘れていました。
よろしくおねがいします。

bonbo

Re: 動的確保がうまく行かない

#3

投稿記事 by bonbo » 12年前

なにをやっているんだ…
注釈を書こうとしたら間違えて送信をしてしまいました。
すみませんでした。

コード:

typedef float           GLfloat;
で定義されています。
よろしくおねがいします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 動的確保がうまく行かない

#4

投稿記事 by softya(ソフト屋) » 12年前

iPhone系は答えられないですが、言語や機種の表明とかcodeタグとかちゃんと使ってくださいね。C++になってました。

コード:

int count =10;
GLfloat *squareVertices=new GLfloat(count*8);
for (int vert=0; vert<count; vert++) {
                squareVertices[(vert)*8+0]=vert*10      ;squareVertices[(vert)*8+1]=0 ;
                squareVertices[(vert)*8+2]=vert*10+width;squareVertices[(vert)*8+3]=0 ;
                squareVertices[(vert)*8+4]=vert*10      ;squareVertices[(vert)*8+5]=10;
                squareVertices[(vert)*8+2]=vert*10+width;squareVertices[(vert)*8+7]=10;
            }
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 動的確保がうまく行かない

#5

投稿記事 by みけCAT » 12年前

bonbo さんが書きました:NSLog(@"%f",(GLfloat *)squareVertices);
で、チェックすると
nan
がかえってきてしまいます。
どこがおかしいのでしょうか。
おかしいのはここで、

コード:

NSLog(@"%f",*((GLfloat *)squareVertices));
が正しいのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

bonbo

Re: 動的確保がうまく行かない

#6

投稿記事 by bonbo » 12年前

すみません・・・

bonbo

Re: 動的確保がうまく行かない

#7

投稿記事 by bonbo » 12年前

>みけCATさん
ありがとうございます。
なおしたらちゃんと
80.0がかえってきました。
となると

コード:

for (int vert=0; vert<count; vert++) {
                squareVertices[(vert)*8+0]=vert*10      ;squareVertices[(vert)*8+1]=0 ;
                squareVertices[(vert)*8+2]=vert*10+width;squareVertices[(vert)*8+3]=0 ;
                squareVertices[(vert)*8+4]=vert*10      ;squareVertices[(vert)*8+5]=10;
                squareVertices[(vert)*8+6]=vert*10+width;squareVertices[(vert)*8+7]=10;
            }
ここがおかしいのですね。
ちゃんと80個の動的確保ができてるのに
squareVertices[79]に代入するとエラーで終了してしまいます。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 動的確保がうまく行かない

#8

投稿記事 by みけCAT » 12年前

bonbo さんが書きました:なおしたらちゃんと
80.0がかえってきました。
それは正しい値ではない気がします。
コードをみると、squareVertices[0]には0が入るのが正しい仕様に見えます。
80.0は10*8、すなわちcount*8ですね。
このことから、おそらくcount*8で初期化された1個のGLfloat型の要素を確保していると思います。
Objective-Cの仕様はわからないのですが、C++ならnew GLfloat[count*8]と書くはずです。
bonbo さんが書きました:ちゃんと80個の動的確保ができてるのに
この根拠は何ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

bonbo

Re: 動的確保がうまく行かない

#9

投稿記事 by bonbo » 12年前

できました。
ぜんぜん分かってなかったのですね。ごめんなさい。
GLfloat *squareVertices=new GLfloat(count*8);
の()を[]に直したら
GLfloat *squareVertices=new GLfloat[count*8];
うまくいきました。
ちゃんと0がかえってきました。
ありがとうございました。

閉鎖

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