0

そのため、実際には機能が不十分なAPIを使用しています。(具体的にはクイックハプティックス)私が機能するものを作成するには、構造内のオブジェクトを削除して再作成する必要があります(オブジェクトのコンストラクターが必要な方法で機能しないため、newを使用せずに) to)次にそれを何かに設定します。

私はの線に沿って何かをしようとしています

delete data.cursor;
Cursor* data.cursor = (Cursor*)malloc(sizeof(Cursor));
data.cursor = data.cursors[index];

しかし、これはクラッシュを引き起こします(編集申し訳ありませんが、コンパイルされませんが、私が言うつもりでしたが、コンパイラエラーを理解していません)

追加情報:APIの動作方法として、アイテムへのポインターを送信する必要があります。このポインターは、最初に取得し、実行中に情報を書き込みます。カーソルタイプのオブジェクトのメッシュを更新しようとしています。新しいメッシュをロードするための更新機能を提供しますが、それらは非常に高価であり、最大3fpsでしか実行できません。私の解決策は、起動時にオブジェクトを配列にロードしてから、プログラムがカーソルとして検索するオブジェクトを切り替えることです。

私は一般的にC++に不慣れであり、私の経験はすべて座って指示なしで入力することからのものであるため、私が見逃しているいくつかの基本的なC++のことがあるかもしれません。

編集:明確にするために、これを行うと、非常にゆっくりと動作します

delete data.cursor;
data.cursor = new Cursor("filename");

ここで、data.cursors [index]は、起動時にまったく同じ方法で宣言されました。

4

2 に答える 2

3

malloc()を使用してアドレスにメモリを割り当ててから、アドレス値をオブジェクトに設定しているように見えます。代わりに必要になる可能性が最も高いのは、次のような行です

*data.cursor = data.cursors[index];

*その場所のメモリを逆参照して、その値を設定できるようにします。ただし、これはを呼び出すことに注意してくださいoperator=

補足:

オブジェクトがどのように割り当てられたかを追跡する必要があるため、new/deletemalloc()/を混在させることは一般的に悪い考えです。つまり、それぞれの割り当て呼び出しで適切な解放呼び出しを使用する必要があります。free()

于 2012-04-26T15:59:33.403 に答える
0

メンバーを宣言しようとしているため、コンパイルされません。

delete data.cursor;
Cursor* data.cursor = (Cursor*)malloc(sizeof(Cursor));

違法である場合、次のようになります。

delete data.cursor;
data.cursor = (Cursor*)malloc(sizeof(Cursor));

また、cursorはポインタなので、

data.cursor = data.cursors[index];

ポインタがそのメモリを指すようになるので、以前に割り当てられたメモリmalloc(sizeof(Cursor));がリークされます。おそらくここを探していmemcpyます。

于 2012-04-26T16:06:50.363 に答える