我遇到了从while循环全局更新数组的问题,如下面的expalined。请注意,我只能使用C 95及之前的功能。任何帮助将不胜感激!完整粘贴箱http://pastebin.com/ss6VgTCD
在我的程序顶部声明
int data_count, i;
float *x_values, *y_values;
float x[100],y[100];
在我的主要功能中,我的数组是使用以下代码创建的:
printf("\nPlease Enter How Many Data Points You Wish To Enter: \n");
scanf("%d", &data_count);
x_values=(float*)calloc(data_count,sizeof(*x_values));
y_values=(float*)calloc(data_count,sizeof(*y_values));
if (x_values==NULL) {
printf("Error! Memory Could Not Be Allocated. ");
exit(0);
}
文件读取功能用于导入先前输入的数据,该功能正在获取正确的数据并在我的调试行printf("%12f%12f\n", x_values[i], y_values[i]);
中显示正确的数据点,但仅在本地更新x_values
和y_values
因为这些导入的数据不能被程序的其余部分看到。如何全局更新阵列?
void file_read(void) {
store = fopen ("j:/StoredValues.txt", "r");
if (store == NULL )
printf("\nError: Failed To Open Previous Data File - Program Will Continue Anyway\n");
else {
printf("\nSuccess: Data From Previous Run Imported\n");
i=0;
do {
fscanf ( store, "%f,%f\n", &x[i], &y[i]);
x_values = x;
y_values = y;
printf("%12f%12f\n", x_values[i], y_values[i]);
i=i+1;
} while (!feof(store));
fclose(store);
}
}
P.S。我只用C编码了2周,这很简单很好:)
答案 0 :(得分:3)
在第一个代码块中,您已经分配了内存并将指针保存在' x_values'中。 在第二个块中,您可以更改' x_values'指向' x'阵列。 ' x'数组已经为100个浮点值分配了内存。
分配后,您将不再拥有指向已分配内存的指针。 存储在那里的任何数据都不再可访问,因为你不再有指向它的指针。
编辑:
这里建议替换file_read()例程:
void file_read(void) {
store = fopen ("j:/StoredValues.txt", "r");
if (store == NULL )
printf("\nError: Failed To Open Previous Data File - Program Will Continue Anyway\n");
else {
printf("\nSuccess: Data From Previous Run Imported\n");
float* px;
float* py;
px = x_values;
py = y_values;
while (!feof(store))
{
fscanf ( store, "%f,%f\n", px, py);
printf("%12f%12f\n", *px, *py );
px++;
py++;
}
fclose(store);
}
}
编辑2:
菜单选项2将显示x_values的内容。如果file_read()将内容放在x数组中,那么您无法使用选项2显示它。您也无法将x数组的内容复制到x_values,因为x_values尚不存在。
在尝试阅读之前,您需要为数据创建一个存储区域。 为此,您需要存储文件中的点数。
还要考虑:
用户输入10分,并为10分配空间。 然后用户想要输入新数据并想要输入12。 你现在必须使用free()和alloc()来获得额外的两个空间。
答案 1 :(得分:2)
x_values = x;
y_values = y;
这会导致x_values和y_values指向静态分配的数组,而不是动态为它们分配的数据。因此,在此分配之后,动态数据现在独立存在并作为内存泄漏在RAM中隔离,而不会从程序中引用它。