【发布时间】:2017-03-30 23:22:23
【问题描述】:
我有一个(我认为)非常简单的问题需要帮助。我正在学习用 C 语言调用用户定义函数的指针。
我有两个函数,我的 main() 和另一个从文件中提取某些数据的函数 read_file()。 Read_file() 从指定的文件中提取数据 - 一个整数 (coeff_num) 和一系列值 (coeff_values) - 并打印出数据。然后 main() 旨在重新打印此数据作为检查,以确保正确调用它以执行进一步的计算。
我的问题是:read_file() 函数中的所有内容都打印得很好。签入 main() 时,data_num 打印正常,但 data_values 不正常。
代码(删除了一些不相关的部分,主要是错误检查的东西)如下:
int read_file(int *data_num, double **data_values, char *filename);
int main()
{
int data_num;
double **data_values;
char *filename[] = {/*FILES*/};
read_fule(&data_num, data_values, *filename);
printf("Check Number:\n%u\n", data_num);
printf("Check Values:\n);
for(int i = 0; i<data_num; i++)
{
printf("%u\t", data_values[i]);
}
return(0);
}
和:
int read_file(int *data_num, double **data_values, char *filename)
{
FILE * fp = fopen(filename, "rb"); //Opening file
/* Error checking code here - see if file opens, find length
return if not long enough, etc */
//Find number of values
char buffer_n[4];
fread(buffer_n, 4, 1, fp);
int result = buffer_n[0]|(buffer_n[1] << 8)|(buffer_n[2] << 16)|(buffer_n[3] << 24); //Change endian
*data_num = result;
/* Instructed to allocate memory */
data_values = malloc(8*result); //Allocating memory
//Reads data values
fread(data_values, 8, result, fp);
//Prints results as float
printf("Number of data values: %d \n", result);
for(int i=0; i<result; i++)
{
printf("%0.3f\t", data_values[i]);
}
fclose(fp);
return 1;
}
我相当肯定这是我的指针的问题。对于程序来说,我在读取data_values时必须使用malloc(),而read_file必须有以下原型:int read_file(int *data_num, double **data_values, char *filename)。有人可以给我一些关于我在哪里搞砸的指导吗?
欢迎任何帮助,我们将不胜感激。
【问题讨论】:
-
你的
result是什么,分配内存可能太大了。 -
结果的值?在我正在阅读的文件中,这通常是 30(%d) 左右。
-
几点: malloc() 返回 void 指针,因此您需要将其类型转换为所需的指针,另一件事 malloc() 仅返回一个指针,因此指向指针的指针没有意义。所有 malloc() 都应该有各自的 free() 调用
-
是的,自从我发布我的 malloc() 实现可能是问题的一部分以来,我实际上一直在考虑。我一直在查看一些参考页面,尽管我还没有完全弄清楚如何正确修复它。感谢您确认这是不正确的。
标签: c pointers user-defined-functions