Программа отказывается входить в цикл for - PullRequest
0 голосов
/ 02 мая 2018

Я сейчас работаю над бинарным деревом поиска, и по какой-то причине этот цикл даже не запустился. Мы пробовали различные методы, чтобы проверить, является ли это проблемой strlen () или даже проблемой типа данных.

ElementType - это символ *.

void sortinsert(Node **root, ElementType str)
{
    int i, j;
    char temp;
    char copy[100];
    strcpy(copy, str);

    int k = strlen(str);
    printf("%d", k);

    for (i = 0; i < k; i++) {
        /*printf("%s", str);
        printf("%c", *str);*/
        printf("%d", i);
        for (j = 0; j < strlen(str) - i; j++) {
            if (str[j] > str[j + 1]) {
                temp = str[j];
                str[j] = str[j + 1];
                str[j + 1] = temp;

            }
        }
    }

    Node *p = (Node *)malloc(sizeof(Node));
    p->data = (char*)malloc(sizeof(char)*strlen(copy));
    p->sig = (char*)malloc(sizeof(char)*strlen(str));

    strcpy(p->sig, str);
    strcpy(p->data, copy);

    p->left = NULL;
    p->right = NULL;
    p->next = NULL;

    Node *rootbackup;

    if ((*root) == NULL) {
        (*root) = p;
    }
    else {
        rootbackup = *root;
        if (strcmp((*root)->data, copy) > 0) {
            sortinsert(&(*root)->left, copy);
        }
        else
        {
            if (strcmp((*root)->data,copy) < 0)
                sortinsert(&(*root)->right, copy);
        }
        *root = rootbackup;
    }
}

1 Ответ

0 голосов
/ 02 мая 2018

Цикл фактически начинается, если размер строки больше 0. Но есть неопределенное поведение, потому что вы должны выделить память для завершающего 0:

p->data = (char*)malloc(sizeof(char)*strlen(copy)+1);
p->sig = (char*)malloc(sizeof(char)*strlen(str)+1);

Вот сообщаемая проблема без "+1" в malloc:

https://taas.trust -in-soft.com / tsnippet / т / 0b30573d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...