Как я могу написать код на c, работающий в Windows?

#c

#c

Вопрос:

этот код может выполняться в Linux, почему не в Windows (MSVC)?

 #include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node_tag
{
    int data;
    struct node_tag* left;
    struct node_tag* right;
} Tree;

void insert(Tree** rt, int num)
{
    Tree* tmp;
    if (*rt == NULL)
    {
        tmp = (Tree*)malloc(sizeof(Tree));
        if (tmp == NULL)
        {
            fprintf(stderr, "malloc error ");
            exit(1);
        }
        tmp->data = num;
        *rt = tmp;
    }
    else
    {

        if (num > (*rt)->data) {
            insert(amp;(*rt)->right, num);
        }    
        else {
            insert(amp;(*rt)->left, num);
        }
         
    }
}

void print_nodes(Tree* root)
{
    if (root == NULL)
    {
        return;
    }

    if (root->left != NULL)
    {
        print_nodes(root->left);
    }

    printf("data= %dn", root->data);

    if (root->right != NULL)
    {
        print_nodes(root->right);
    }
}

int main(int argc, char** argv)
{
    Tree* root = NULL;
    int arr[] = {
        415,
        456,
        56,
        156,
        51,
        21,
        54,
        3,
        15,
        651,
    };

    int length;
    length = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < length; i  )
    {

        insert(amp;root, arr[i]);
    }
    print_nodes(root);
    return 0;
}
  

Ошибки MSVC включены if (num > (*rt)->data) .

Включены ошибки if (num > (*rt)->data) MingW64 (ошибка сегментации).

Комментарии:

1. Код должен быть размещен непосредственно в вашем вопросе, а не на внешних сайтах.

2. Ваш код должен работать с MSVC . Какую ошибку вы получаете?

3. Буферы, выделенные через malloc() , должны быть инициализированы перед использованием их значений, иначе будет вызвано неопределенное поведение .

4. C и C — это разные языки. Не могли бы вы выбрать один?

5. @MikeCAT, спасибо, добавьте код memset успеха!

Ответ №1:

Значения в буферах, выделенных через malloc() , изначально не определены, поэтому вы должны инициализировать их перед использованием значений.

Это можно сделать следующим образом:

 Tree* tmp;
if (*rt == NULL)
{
    tmp = (Tree*)malloc(sizeof(Tree));
    if (tmp == NULL)
    {
        fprintf(stderr, "malloc error ");
        exit(1);
    }
    tmp->data = num;
    tmp->left = NULL; /* add this */
    tmp->right = NULL; /* add this */
    *rt = tmp;
}