[英]Troubles using realloc function
我的代码遇到麻烦,需要您的建议,当我编译代码时,它在realloc行显示警告,它说:“赋值使指针从整数开始而不进行强制转换”,但是它可以编译并且一切运行良好,直到我需要扩展数组,当我输入多少数字时我需要崩溃。 你知道是什么原因造成的吗? 我该如何解决? 谢谢。
编辑:已经修复了! 以下代码现已正常运行。 码:
#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;
}
您尚未在stdlib.h
中包含malloc
和realloc
的原型。
如果没有原型,编译器会假设realloc
返回int
而不是void*
,并且您将int
分配给指针data.num
。 将整数分配给声明为指针的变量时,会收到警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.