因此,此代码段的目标是从表示多项式系数的文件中读取数字。数量未知。每行只有一个“多项式”。我在下面阅读文件的示例。
Polynomails.txt
1 2 0 0 5
7.0 0 0 0 -2.25 1.13
当前main仅检查给定的文件名并且可以打开它,然后调用ReadPoly,如下所示。 BUFFSIZE被定义为256,在此文件中带有define语句。
void ReadPoly(FILE* InputFile){
polynomial poly;
double complex *coef;
char *p, *buffer;
unsigned int terms;
buffer = (char*) malloc(BUFFSIZE);
while(fgets(buffer,BUFFSIZE,InputFile)){
coef = (double complex*) malloc(BUFFSIZE*sizeof(double complex));
terms = 0;
p = strtok(buffer, " ");
while(NULL != p){
coef[terms] = atof(p);
terms++;
p = strtok(NULL, " ");
}
coef = (double complex*) realloc(coef,(terms*sizeof(double complex)));
printf("terms provided to init: %d\n",terms);
createPoly(&poly,terms);
poly.polyCoef = coef;
printf("terms in struct: %d\n",poly.nterms);
}
free(buffer);
}
这是createPoly函数和poly结构的声明。
typedef struct
{
unsigned int nterms; /* number of terms */
double complex *polyCoef; /* coefficients */
} polynomial;
void createPoly(polynomial *p, unsigned int nterms){
double complex terms[nterms];
p = (polynomial*) malloc(sizeof(polynomial));
p->nterms = nterms;
p->polyCoef = terms;
printf("In createPoly, nterms: %d\n",p->nterms);
}
现在,根据我的判断,所有数字都已正确读取,但是结构中的nterms值未按预期工作。这是我运行此命令时的输出。值得一提的是,即使使用相同的文件输入,“结构中的术语”值也不总是相同的。
terms provided to init: 6
In createPoly, nterms: 6
terms in struct: 1075624960
terms provided to init: 5
In createPoly, nterms: 5
terms in struct: 1075624960
我唯一的是,该结构的polyCoef字段以某种方式覆盖了nterms字段,但是没有固定的大小(这不是一个选择),我不确定如何继续。
最佳答案
在ReadPoly
函数中,将poly
声明为堆栈变量,这意味着编译器已经为堆栈上的结构分配了空间。
然后在creatPoly
中,将指针重新分配给您手动分配的其他内存,从而失去传递给createPoly
的原始指针,因此,您在结构中设置的数据仅针对该新分配的结构设置,而不是在原始结构中设置传递给函数。这也意味着您存在内存泄漏,因为一旦函数返回,您在createPoly
中分配的指针就会丢失。
有两种解决方案:要么不在createPoly
中分配内存,要么让poly
作为ReadPoly
中的指针,然后将指向该指针的指针作为createPoly
的参数传递(枚举按引用传递) 。我建议第一个解决方案。
关于c - 未存储C int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29458695/