Стек последовательности и указатель на структуру - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу написать алгоритм обхода двоичного дерева, чтобы протолкнуть указатель структуры узла двоичного дерева в стеке последовательностей, но когда я обращаюсь к памяти, у меня возникает проблема, то есть S->data = (tNode*)malloc(sizeof(tNode ) * maxSize); Это предложение имеет проблема, каждый раз, когда отладка останавливается в этом блоке. Но я не знаю, каково правильное решение, и спрашиваю ответы.

typedef struct TreeNode {
    char data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode, *tNode;

typedef struct sNode {
    tNode* data;
    int top;
    int maxSize;
} sNode, *Stack;

Status createStack(Stack S,int maxSize) {
    S->data = (tNode*) malloc(sizeof(tNode) *maxSize);
    S->top = -1;
    S->maxSize = maxSize;
    return OK;
}

1 Ответ

0 голосов
/ 10 апреля 2019

tnode - это тип указателя на структуру

Итак, когда вы используете

S->data = (tNode*)malloc(sizeof(tNode ) * maxSize);

, вы вводите тип с помощью (tnode*), используя указатель на указатель насостав.Также размер выделенной памяти будет размером указателя, а не размером структуры.Кроме того, вы не должны типизировать результат ваших вызовов malloc.

typedef для вашего Stack также использует указатель на указатель структуры.Я думаю, это не то, что вы хотите для вашего приложения.

Вы должны использовать

typedef struct sNode {
    TreeNode* data;
    int top;
    int maxSize;
} sNode, *Stack;

Тогда вы можете выделить память как

S->data = malloc(sizeof(TreeNode) * maxsize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...