は、私はこのような文書化インタフェースを持っています。 だから私はC構造体の質問
struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->Something(iTree, 128);
を行う。しかし、それは初期化に失敗し続けています。私はこの権利をしていますか? Somethingメソッドの最初のメンバーは、まったく同じ構造体へのポインタですか?
誰でも説明できますか?
ありがとうございました
は、私はこのような文書化インタフェースを持っています。 だから私はC構造体の質問
struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->Something(iTree, 128);
を行う。しかし、それは初期化に失敗し続けています。私はこの権利をしていますか? Somethingメソッドの最初のメンバーは、まったく同じ構造体へのポインタですか?
誰でも説明できますか?
ありがとうございました
Something
は機能ポインタであり機能ではないため、何かに設定する必要があります。 mallocで作成した構造体には、ガーベッジと構造体フィールドが含まれているだけで、有用である前に設定する必要があります。
struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->a = 10; //<-- Not necessary to work but you should set the values.
iTree->Something = SomeFunctionMatchingSomethingSignature;
iTree->Something(iTree, 128);
更新
#include <stdlib.h>
#include <stdio.h>
struct Tree {
int a;
//This is a function pointer
void* (*Something)(struct Tree* pTree, int size);
};
//This is a function that matches Something signature
void * doSomething(struct Tree *pTree, int size)
{
printf("Doing Something: %d\n", size);
return NULL;
}
void someMethod()
{
//Code to create a Tree
struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->Something = doSomething;
iTree->Something(iTree, 128);
free(iTree);
}
メンバーTree::Something
が初期化されることはありません。 Tree
の領域を割り当てますが、割り当ては初期化とは異なり、割り振られたTree
には意味のないビットしか含まれません。
この質問にC++はあまりありません。あなたはタグを削除するか、Benのような回答を得ることを検討するかもしれません。 – pmr
私は1つのことを得ることができません:そのtypedefの目的は何ですか? – sidyll
'Tree'を'} 'と'; 'の間に移動して構造体に名前をつけない限り、typedefを削除したいでしょう。^@ sidyll +1あなたのコメントは私がこれを投稿した後に現れました。 – Joe