使用realloc功能的麻烦

时间:2016-03-14 01:44:54

标签: c

我的代码有问题,我需要你的建议,当我编译代码时它会在realloc行显示一个警告,它说:“Assignment使得指针来自整数而不会被强制转换”,但它编译并且一切运行良好直到我需要扩展我的阵列,当我输入多少数字我需要它崩溃。你知道是什么原因造成的吗?我该如何解决? 谢谢。

编辑:已经修好了!以下代码现在正常运行。 代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
struct numer{
    int limit;
    int start;
    double *num;
    double avg;
};

void fill(struct numer *data);
double ave(struct numer data);
double vari(struct numer data);

int main (){
    int n,op;
    printf ("!!++***Programa para calcular desviacion estandar, la media y la varianza***++!!");
    printf("\nIngrese el número de datos que desea introducir: ");
    scanf("%d", &n);
    struct numer data;
    data.start=0;
    data.num = malloc(n*sizeof(*data.num));

    while(1){
        data.limit=n;
        fill(&data);
        data.avg=ave(data);
        printf("\nLa media es igual a %lf", data.avg);
        printf("\nLa desviacion estandar es igual a %lf", sqrt(vari(data)));
        printf("\nLa varianza es igual a %lf",vari(data));
        printf("\nDeseas añadir mas datos?, presiona 1 para aceptar, 2 para salir: ");
        scanf ("%d",&op);
            if (op==1){
                printf("\nCuantos datos mas deseas añadir?: ");
                scanf("%d",&op);
                n+=op;
                data.num = realloc(data.num, n*sizeof(*data.num));
            }
            else return 0;

    }

}

void fill(struct numer *data){
    for (;data->start<data->limit;data->start++){
        printf("\nIngresa el dato %d: ",data->start+1);
        scanf("%lf",&data->num[data->start]);
    }
}
double ave(struct numer data){
    double ave=0;
    int i;
    for (i=0;i<data.limit;i++){
        ave+=data.num[i];
    }
    ave/=data.limit;
    return ave;
}
double vari(struct numer data){
    double semi=0;
    int i;
    for (i=0; i<data.limit; i++){
        semi+=pow((data.num[i]-data.avg),2);
    }
    semi/=data.limit;
    return semi;
}

1 个答案:

答案 0 :(得分:2)

您尚未将stdlib.hmalloc的原型放在realloc

如果没有原型,编译器会假定realloc返回int而不是void*,并将int分配给data.num,一个指针。将整数分配给声明为指针的变量时,会收到警告。