問題タブ [variable-length-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
206 参照

c++ - 2D 配列としてポインターにアクセスするために VC++ を取得する方法

私は少しグラフィックプログラミングを行っており、openGL を使用して保存する 2 次元配列 (プログラムの実行中にサイズが変化する) を持っています。
そのため、アクセスしようとすると、返されるのはvoidポインタだけです。

ロジックを簡単にするために、コンパイラに 2D 配列であると偽らせて、2D 配列として使用するようにします (arr[i][j]は より簡潔でエラーが発生しにくいためptr[i * y + j])。


私が見つけたこの巧妙なキャスト方法は、GCC (uni の Linux マシン上) でうまく機能します。

これは基本的に、openGL が提供したメモリ ポインターのブロックをtess X tess2D 配列にキャストし、その型の参照を作成してそれを指すようにします。
これにより、のようにメモリにアクセスできますvertices[i][j]sを含む
Vertex単なるtypedefedですstructfloat

ただし、私の Windows マシンの自宅では、VS'12 はヒッシーなフィット感を持っており、(具体的には ; )tessに書かれている整数が必要であると不平を言っています。 理由がわかりません。constanterror C2057: expected constant expression

ここで、 VS が VLA をサポートしていないことは理解していますが、ここでは配列を作成していません。実行時までのサイズがわからないものへの参照を作成してます
したがって、関数呼び出し間でサイズが変化しても気にする必要はありませんよね? これが許可されないのはなぜですか?


思いとどまらず使ってみましたstd::array

そして、明らかなことは別として、references must be initializedこのテストはまだ不平を言っているので役に立ちませんでしたexpression must have a constant value具体的には;error C2975: '_Size' : invalid template argument for 'std::array', expected compile-time constant expression


私はここで何をしようか途方に暮れています。私はとても誇りに思ってreinterpret_castいました.
ポインターからを作成したくありませんstd::vector。完了したら、その動的配列からポインターの場所にデータをコピーします。メモリブロックがすでにそこに座っているだけの場合、それは非常に非効率的です! 既存のメモリ ブロックの周り
にベクトルを作成する方法はありませんね。..いいえ、ばかげているように聞こえます。

あきらめずにそのまま使用できるかどうかを確認したいVertex*; アイデア?
VSで機能しない理由について誰かが教えてくれますか?
動作させるためにできることはありますか (VS の拡張/更新)?
VS'13 はこれのサポートを追加しますか?

C2087: 'vertices' : missing subscript説明できない エラーも発生しています。VSが必死に一定になり
たいことを示しているように見えるこれらの他のエラーと同様に:tess
error C2466: cannot allocate an array of constant size 0
error C2540: non-constant expression as array bound
error C2440: 'initializing' : cannot convert from 'Vertex [1][1]' to 'Vertex (&)[][1]'

0 投票する
2 に答える
940 参照

matlab - 可変長配列を格納する方法は?

for ループの反復ごとにサイズが変化する配列を格納したいと考えています。例えば、

'ans' は、y の反復ごとにサイズが変化する行ベクトルです。

これらの可変長の 'ans' を ms に格納するにはどうすればよいですか?

'ms' を cell として初期化しようとすると、"Conversion to cell from double is not possible." というエラーが表示されます。

これを解決する方法は何ですか?

よろしくお願いします

0 投票する
1 に答える
195 参照

c - pthread_t の配列の初期化時のセグメンテーション違反

nコマンドラインから入力を受け取り、その操作の一部として次のコードを呼び出そうとするプログラムがあります。

これで、n <= 1023どのn > 1023. それを引き起こすのはこの特定の行です-私のコードはそれを超えて進みません。なぜこれが起こっているのかについて少し混乱しています。可能な限りの助けをいただければ幸いです。

0 投票する
1 に答える
509 参照

c++ - 中括弧を使用して VLA を初期化するのは GCC のバグまたは拡張機能ですか?

次のコードを念頭に置いてください。

GCC は C99 モードで適切にエラーを出し、error: variable-sized object may not be initializedclang は C++ モードで同じエラーを出します。ただし、C++ モードでは、GCC は文句を言いません。これは、 C extensions VLA pageに記載されていない拡張である可能性があると私に信じさせます。一致するバグレポートも見つかりませんでした。これが拡張機能であるかどうか、または既存のバグレポートがあるかどうかを確認できますか?