gpt4 book ai didi

c - 通过多次调用该函数将大量内容打印到文件时出现内存泄漏

转载 作者:行者123 更新时间:2023-11-30 20:10:18 26 4
gpt4 key购买 nike

当我通过多次调用此函数将大量内容打印到文件时,我不断发生内存泄漏。除非我实际打印,否则不会有任何问题。

void print_fields_weights_energies(MKL_Complex16 *stored_fields,
MKL_Complex16 *stored_energies,
MKL_Complex16 *weights,
int steps,
int_st ist,
cns_st cns) {

/*Print The Fields Out To File*/
int walkers;
int fields;
int field_number;
double tau = steps*cns.dtau;
char message[150];
FILE *pf;

/*Name and Make File*/
sprintf(message, "fields-tau%f.dat", tau);
pf = fopen(message, "w+");

for (walkers=0; walkers<cns.max_number_walkers; walkers++) {
for (fields=0; fields<ist.n_spin_orbitals_sq; fields++) {
field_number = walkers*ist.n_spin_orbitals_sq*3+fields*3;
fprintf(pf, "%f\t %d\t %d\t", tau, walkers, fields);
fprintf(pf, "%f\t %f\t %f\t %f+%fi\t\t", stored_energies[walkers*3].real, stored_energies[walkers*3+1].real, stored_energies[walkers*3+2].real, weights[walkers].real, weights[walkers].imag);
fprintf(pf, "%f\t %f+%fi\t %f+%fi\n", stored_fields[field_number].real, stored_fields[field_number+1].real, stored_fields[field_number+1].imag, stored_fields[field_number+2].real, stored_fields[field_number+2].imag);
}
}
fflush(pf);
return;
}

最佳答案

您的函数底部需要一个 fclose() (并且不需要 fflush() - 文件关闭时将被刷新)。

在引用它之前,您还应该检查 (pf == NULL),以防 fopen() 出现错误。获取错误消息比获取 SEGV 有用得多。

对于 future 的内存泄漏,我强烈推荐工具“valgrind”——它可以准确地指出内存泄漏发生的位置。

关于c - 通过多次调用该函数将大量内容打印到文件时出现内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com