0

関数に二重ポインタを渡しています。この関数は、ファイルからリンクされたリストにデータを読み取ります。最初のノードへのポインターとして CircuitData を設定します。関数を呼び出して CircuitData を使用したい後、それは空です。最初のノード (&newPtr) のアドレスが返されないのはなぜですか?

ListNodeType **CircuitData;
int numEl = 0;
int numNodes = 0;
CircuitData = NULL;

ReadFile(CircuitData, &numEl, &numNodes);
printf("%p", CircuitData);

私が呼び出している ReadFile 関数の一部:

void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){
    *numEl = 0;
    *numNodes = 0;

    ListNodeType *newPtr, *tempPtr;
    newPtr = malloc(sizeof(ListNodeType));
    CircuitData = &newPtr;
    newPtr->nextPtr = NULL; 
4

4 に答える 4

1

C では値はコピーによって渡されることに注意してくださいReadFile

CircuitData = &newPtr;

呼び出し元には伝達されません。代わりにこれが欲しかったと思います:

*CircuitData = newPtr;

これが機能CircuitDataするには、有効なメモリ位置を指す必要があります。初期化しないでくださいNULL。代わりにこれを行うことができます:

ListNodeType *CircuitData;

そして、次のように関数を呼び出します。

ReadFile(ListNodeType &CircuitData, ...)
于 2013-10-17T20:51:43.457 に答える
0

呼び出しコードは次のようにする必要があります。

ListNodeType *CircuitData = NULL;

ReadFile(&CircuitData, &numEl, &numNodes);
于 2013-10-17T20:51:52.910 に答える
0

CircuitData を (ListNodeType *) として定義し、関数 ReadFile で &CircuitData を渡します。

于 2013-10-17T20:52:29.833 に答える