1

タイトルが示すように、オブジェクト ポインターの文字列に値を挿入しようとしています。

私のヘッダーでは、オブジェクトは次のようになります。

typedef struct d_tree
{
std::string name;
d_tree *parent;
std::vector<d_tree> dirs;
std::vector<t_file> files;
} tree_node;

(これは、好奇心旺盛な方のためのファイルおよびディレクトリ システムのモデル化を扱う課題です。) 簡単にするために、文字列とベクトルを使用しています (char * と double ポインター配列のニュアンスを避けるため)。

さて、このディレクトリ ツリーの先頭には、ソースに次のものがあります。

tree_node *G = (tree_node *)malloc(sizeof(tree_node));
getline(dirs, dirp);  //First should be main parent, or ./
G->name = dirp;
G->parent = NULL;
tree_node *top = G;
tree_node *curr = G;

割り当ては正常に実行され、getline は使用する文字列データを読み取るためだけのものです...しかし、一度ヒットするG->name = ...と、私のコンパイラ (VS 12 を使用) は叫びます:

" First-chance exception at 0x57AD11CE (msvcr110d.dll) in File_System.exe: 0xC0000005:
 Access violation writing location 0xCDCDCDCD.

If there is a handler for this exception, the program may be safely continued. "

例外がスローされる前にローカル変数を見ると、いくつかのことに気付きます: G の name 変数の値の列に があります。

親変数も奇妙に思えますが、まだ心配する必要はありません (特に、とにかく NULL にしているので..)

この問題を軽減する方法についてのアドバイス (できれば文字列を保持しますが、スムーズな解決策が存在しない場合でも理解できます) は大歓迎です。

4

2 に答える 2