在 C 语言中,数组的大小必须在编译时确定,即使用常量值。当数组的大小依赖于运行时的变量时,编译器会抛出“表达式必需含有常量值”的错误。

以下代码片段中,merged_labelsmerged_scores 数组的大小取决于 total_samples,而 total_samples 的值在运行时才确定。因此,编译器无法在编译时确定数组大小,从而导致错误。

int total_samples = 0;
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < num_samples[i]; j++) {
        fprintf(merged_file, "%lf %lf\n", truelabels[i][j], pridictedvalues[i][j]);
        total_samples++;
    }
}
fclose(merged_file);

double merged_labels[total_samples];
double merged_scores[total_samples];

您可以使用动态内存分配来解决此问题。首先,将 merged_labelsmerged_scores 声明为指针,然后使用 malloc 函数为它们分配足够的内存空间。下面是修改后的代码:

int total_samples = 0;
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < num_samples[i]; j++) {
        fprintf(merged_file, "%lf %lf\n", truelabels[i][j], pridictedvalues[i][j]);
        total_samples++;
    }
}
fclose(merged_file);

double* merged_labels = malloc(total_samples * sizeof(double));
double* merged_scores = malloc(total_samples * sizeof(double));

// 使用merged_labels和merged_scores进行后续操作

// 记得最后释放动态分配的内存
free(merged_labels);
free(merged_scores);

这样,您就可以动态地分配足够的内存来存储合并后的标签和分数,而不需要在编译时知道 total_samples 的确切值。

**注意:**在使用完动态分配的内存后,一定要使用 free 函数释放内存,以避免内存泄漏。


原文地址: https://www.cveoy.top/t/topic/nj3G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录