我的代码有问题,我需要你的建议,当我编译代码时它会在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;
}
答案 0 :(得分:2)
您尚未将stdlib.h
和malloc
的原型放在realloc
。
如果没有原型,编译器会假定realloc
返回int
而不是void*
,并将int
分配给data.num
,一个指针。将整数分配给声明为指针的变量时,会收到警告。