Un programa c funciona bien en Ubuntu, pero cuando lo compilo y lo ejecuto en Windows usando MinGW, el programa se ejecuta pero como resultado muestra algún valor basura

Un programa c funciona bien en Ubuntu, pero cuando lo compilo y lo ejecuto en Windows usando MinGW, el programa se ejecuta pero como resultado muestra algún valor basura

Escribí un código C en Ubuntu 14.04.4 LTS y lo compilé. Está funcionando como se esperaba, pero en Windows se está ejecutando, pero al final el resultado muestra algunos valores basura.

El código que escribí es

#include <stdio.h>
#include <stdlib.h>
struct poly{
    int coe[100];
    };
void mul(struct poly *pr, int a, struct poly *p){
    struct poly res;
    int i;
    for(i = 0; i < 100; i++){
        res.coe[i] = 0;
        int j;
        for(j = 0; j <= i; j++){
            res.coe[i] += ((*pr).coe[j])*((*(p + a)).coe[i - j]);
        }
    }
    *pr = res;

}
void main(){
    struct poly *p;
    p = (struct poly *)malloc(100*sizeof(struct poly));
    int n;
    printf("no. of poly :");
    scanf("%d", &n);
    int i; int max = 0;
    for(i = 0; i < n; i++){
        int de;
        printf("deg? of %d:", i+1);
        scanf("%d", &de); max += de;
        int j;
        for(j = 0; j <= de; j++){
            printf("co-eff of deg %d:", j);
            scanf("%d", &p[i].coe[j]);
        }
    }
    struct poly res;
    struct poly *pr;
    res = p[0];
    pr = &res;
    int fi;
    for(fi = 1; fi < n; fi++){
        mul(&res, fi, p);
    }
    for(i = 0; i < (max + 1); i++){
        printf("%d\n", res.coe[i]);
    }
}

y el resultado en windows es

C:\Users\Sai\Documents\C++>gcc ac.c -o ac

C:\Users\Sai\Documents\C++>ac
no. of poly :3
deg? of 1:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
deg? of 2:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
deg? of 3:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
1
3
6
85067032
255201082
510403447
-1897503563

C:\Users\Sai\Documents\C++>

el resultado en ubuntu es

sai@sai-Inspiron-7548:~$ gcc ac.c -o ac
sai@sai-Inspiron-7548:~$ ./ac
no. of poly :3
deg? of 1:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
deg? of 2:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
deg? of 3:2
co-eff of deg 0:1
co-eff of deg 1:1
co-eff of deg 2:1
1
3
6
7
6
3
1
sai@sai-Inspiron-7548:~$ 

Cómo hacer que este programa se ejecute correctamente en Windows 10.

¿Hay algún problema en el código que escribí?

Gracias.

Respuesta1

Si bien esto debería haberse publicado en otro lugar, esta es la solución:

¡Inicialice siempre!

No estás inicializando la coe[100]matriz de todos los elementos de tu archivo struct poly*.

En sus bucles solo configura algunas de las entradas, sin embargo, su multifunción también accede a las no inicializadas.

Supongo que gcc en Linux de alguna manera se encarga de eso al inicializarlos como 0 de forma predeterminada; sin embargo, el estándar define el valor de un entero no inicializado como indefinido.

MinGW no lo inicializa por usted, por lo que lo que sea que esté en la memoria en ese momento arruina sus resultados.

Editar: ¡Por supuesto, también deberías liberar la memoria asignada con free(p);!

Así es como puedes solucionarlo:

#include <stdio.h>
#include <stdlib.h>
struct poly{
    int coe[100];
};
void mul(struct poly *pr, int a, struct poly *p){
    struct poly res;
    int i;
    for(i = 0; i < 100; i++){
        res.coe[i] = 0;
        int j;
        for(j = 0; j <= i; j++){
            res.coe[i] += ((*pr).coe[j])*((*(p + a)).coe[i - j]);
        }
    }
    *pr = res;

}
void main(){
    struct poly *p;
    p = (struct poly *)malloc(100*sizeof(struct poly));
    for(int k = 0; k < 100; k++)
        for(int l = 0; l < 100; l++)
            p[k].coe[l] = 0;
    int n;
    printf("no. of poly :");
    scanf("%d", &n);
    int i; int max = 0;
    for(i = 0; i < n; i++){
        int de;
        printf("deg? of %d:", i+1);
        scanf("%d", &de); max += de;
        int j;
        for(j = 0; j <= de; j++){
            printf("co-eff of deg %d:", j);
            scanf("%d", &p[i].coe[j]);
        }
    }
    struct poly res;
    struct poly *pr;
    res = p[0];
    pr = &res;
    int fi;
    for(fi = 1; fi < n; fi++){
        mul(&res, fi, p);
    }
    for(i = 0; i < (max + 1); i++){
        printf("%d\n", res.coe[i]);
    }
    free(p);
}

información relacionada