1

GML ファイルを生成できるプログラムを作成する必要があります。

この目的のために、関数を実装しましたGetEdges。この関数は 3 つの配列を返す必要があります (参照渡し)。

関数のシグネチャは次のようになります。

bool GetEdges(DG_NODE_ID **sourceIds, DG_NODE_ID **destIds, int **weights, int *count)

関数内でスペースをmallocしたい:

*sourceIds = (DG_NODE_ID *) malloc(cntEdges * sizeof (DG_NODE_ID));

4 つのノードを使用するとすぐに、次の出力が得られます。

グラフ: malloc.c:2451: sYSMALLOc: アサーション `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)

= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1)) ) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' 失敗しました。

私はすべてを試しましたが、4 つのノードを使用した後にこれが失敗する理由がわかりません。

ソースコード全体をアップロードしました:ダウンロード - ソースコード

4

2 に答える 2

0

おそらく、以下によって割り当てられたメモリを悪用していることを意味します。

  1. 割り当てられたものの開始前に書き込みます (珍しい)。
  2. 割り当てられたものの終了後に書き込みます(共通)。
  3. 以前に割り当てられていないものを解放する (珍しい)。
  4. 解放された後、以前に割り当てられたスペースへの書き込み (共通)。

ありますvalgrindか?もしそうなら、それを使用してください。そうでない場合は、入手して、可能であれば使用してください。(多くの Unix ライクなシステムで利用できますが、Windows では利用できません。)

于 2012-10-23T17:53:24.620 に答える
0

cntEdges が妥当な値であり、初期化されていない (そして非常に大きな数の) 値ではないことを確認しましたか?

于 2012-10-23T17:54:16.237 に答える