程序拒绝进入for循环

时间:2018-05-02 10:27:35

标签: c loops

我现在正在使用二进制搜索树,由于某种原因,这个循环甚至都不会启动。我们已经尝试了各种方法来测试它是strlen()的问题,还是数据类型问题。

ElementType是char *。

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 :(得分:1)

如果字符串大小大于0,则循环实际开始。但是存在未定义的行为,因为您应该为终止0分配内存:

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

以下是没有&#34; + 1&#34;在malloc:

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