とmallocのクラッシュ/破損したヒープ私は私が作ってるんだ、2D LinkedListのための構造体を持っている:私は、Javaに慣れているのでC - ポインタ
struct Node
{
void *data;
struct Node *up, *left, *right, *down;
};
を、私は、コンストラクタのふり機能を作りましたこれは次のようになります。それは第二段落にmalloc
ラインに達したときに私のプログラムはをクラッシュ
struct Node* buildNode(void *data)
{
struct Node *node = malloc(sizeof(struct Node*)); // Program crashes here.
node->data = data;
node->up = NULL;
node->left = NULL;
node->right = NULL;
node->down = NULL;
return node;
}
。 malloc(sizeof(struct Node*))
から*
を削除すると、クラッシュして正しく動作しません。
これはなぜですか?私のbuildNode
関数は単にNode
へのポインタを返すだけで、実際にはNode
構造体を返していません。私が得たエラーは、ヒープが破損したと何か関係があり、C言語にいくぶん新しかったので、これがどういう意味なのか分かりません。
ありがとうございました!
多くの勉強の後、私はCについて多くのことを学びました。そして、あなたの最後の声明は「プログラムが終了するまでメモリが解放されません」と言われたことがあります。必ずしもそうではない。あなたは精緻化できますか?私が見ているところの多くは、あなたが忘れたかどうかにかかわらず、プログラムが終了したときにアプリケーションによって占められたスペースが解放されていると言います。 – Hatefiend
これは正しいです。 OSがプロセス全体をクリーンアップすると、*プログラムが終了するまでメモリは解放されません。私はあなたが私とまったく同じことを言っていると思います。 – Baldrick
ああ、申し訳ありません。「メモリが解放されないときに」メモリが解放されるまで、メモリは解放されません。 – Hatefiend