0

リンクリストを利用し、関数に「データ」を入力しようとして、基本的な二分探索ツリーを作成しました(必要なため)。ただし、使用しているにもかかわらず、「未使用の変数」エラーが発生し続けますか?

「データ」を返していないからですか?もしそうなら、関数自体が新しいノードを作成することになっている場合、どうすればよいですか?

ありがとう!

/* Binary search trees in linkedlists!

*/

#include <stdio.h>
#include <stdlib.h>

  typedef struct tnode Tnode; //Tree node 

  struct tnode {
    int data;
    Tnode *left;  //for smaller vals
    Tnode *right; //for larger vals
  };

Tnode * makeTnode( int data );

int main(int argc, char*argv[]){
  int data = 9;

  struct tnode new_node;

  Tnode * makeTnode( int data );

  printf("new_node's data is %d\n", new_node.data);

return 0;

}

Tnode * makeTnode( int data ){

  Tnode *new_node =(Tnode *)malloc(sizeof(Tnode));

  if(new_node == NULL) {
    fprintf(stderr, "Error: memory allocation failed\n");
    exit(1);
  }

  new_node->data = data;
  new_node->left = NULL;
  new_node->right = NULL;

  return(new_node);
}
4

2 に答える 2

0
Tnode * makeTnode( int data );

は関数宣言です (既に関数を宣言しているため、ここでは役に立ちません)。

実際に呼び出したい場合は、次を使用します。

new_node = makeTnode(data);

new_node実際にTnode*(ではない) であることを確認しTnodeます。

于 2015-11-12T01:54:21.413 に答える
0

main() での makeTnode への関数呼び出しが正しくなく、返された結果は使用されません。あなたがしたいことは、その結果を として保存することのようnew_nodeです。したがって、メイン関数を次のように変更します。

int main(int argc, char*argv[]){
  int data = 9;
  Tnode * new_node = makeTnode( data );
  printf("new_node's data is %d\n", new_node.data);
  free(new_node); //You should also clean up after yourself.
  return 0;
}
于 2015-11-12T01:50:41.803 に答える