List ポインターを逆参照して C++ のリストにアクセスするにはどうすればよいですか?
次のように実行すると、bad_alloc エラーが発生します。
List My_List = *ls;
lsですList*。コードの前に、私は持っていました:
List* ls = & Temp_List;
の値をls整数として使用しました。私はそれをさまざまな関数に渡しました。キャストして逆List*参照したいので、エラーが発生します
リストをスタックに配置すると、そのアドレスが変更される可能性があります。ただし、ヒープに割り当てると、リストへのポインター (new または malloc) が失われません。
実際、このコードではリストポインタを逆参照しました。*ls;
次に、このコードのスタックに新しいリストオブジェクトを作成し、次のコードでリストをこのリストに
List My_Listコピー しました。<newly created list> = <your list reference>
(間接参照演算子を適用すると、参照が取得されます。これがC ++です)
リストのコピーにはメモリの割り当てが含まれるため、このコピー中にstd :: bad_allocが発生する可能性があります。おそらく、元のリストが破棄されるため、元のリストへのポインタがランダムなガベージを指し、このガベージプログラムに基づいてメモリの量が決まります。リストのコピーに割り当てます。したがって、元のリストがまだ有効であることを確認してください。
または、次のようにコードを修正しますList& My_List = *ls。後でどこかでクラッシュします。
これを試してみてください。
List *My_List = ls;