0

現在、二重リンク リストを使用して一部のデータを並べ替えようとしています。指定されたデータで新しいノードを作成できません。以下は私に与えられたコードです:

#ifndef LIST_H_
#define List_H_
#define MAX_SYMBOL_LENGTH 7
struct order {
    int id;
    char symbol[MAX_SYMBOL_LENGTH];
    char side;
    int quantity;
    double price;
};

typedef struct order* OrderPtr;
typedef struct onode* NodePtr;

struct onode {
    OrderPtr data;
    NodePtr next;
    NodePtr prev;
};

これは、list.h をヘッダーとして使用して記述したコードです。一見クラッシュし続けるコードは次のとおりです。

#include "list.h"

NodePtr newNode(OrderPtr data){

    NodePtr node = (NodePtr)malloc(sizeof(NodePtr));
    //node->data = (NodePtr)malloc(sizeof(OrderPtr));
    //*node->data = *data;
    node->data = data;//This is the one I am having problems with
    node->next = NULL;
    node->prev = NULL;
    return node;
}

正常にコンパイルされますが、オンライン採点者に提出しようとすると、動作しないと表示されます。これが私の思考プロセスです。

  1. NodePtr のメモリを作成します。
  2. NodePtr->data 用のメモリを作成します。

次に、関数から渡されたデータの値を Node->Ptr の値に代入します。しかし、NodePtr->data にメモリを割り当てる方法がわかりません。

4

2 に答える 2

2
NodePtr node = (NodePtr)malloc(sizeof(NodePtr));

あなたが考えていることをしていません。)と同じポインターを保持するためのスペースを割り当てます。通常、32ビットマシンではバイトです。sizeof(int*4

NodePtr node = malloc(sizeof(struct onode));代わりに 行う必要があります。datamember は結果でなければなりませんmalloc(sizeof(struct order));

また、結果の値をcallからキャストしないmalloc()でください。

于 2013-10-18T23:06:06.827 に答える
1

NodePtrノード自体ではなく、ノードへのポインタです。ポインターに十分なメモリを割り当てているだけで、onode 構造体のすべてのメンバーではありません。mallocで呼び出したいと思うでしょうsizeof(struct onode)

于 2013-10-18T23:01:23.283 に答える