C语言中动态分配内存解决表达式必需含有常量值问题
在 C 语言中,数组的大小必须在编译时确定,即使用常量值。当数组的大小依赖于运行时的变量时,编译器会抛出“表达式必需含有常量值”的错误。
以下代码片段中,merged_labels 和 merged_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_labels 和 merged_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 著作权归作者所有。请勿转载和采集!