gpt4 book ai didi

C程序通过Valgrind检查: can't return all the reserved storage space

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:51 25 4
gpt4 key购买 nike

我有以下代码使用字符串和数组从 csv 文件输出 txt 文件,库“input3.h”是将文件输出到 TXT 的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "input3.h"

/* Die Konstanten:
* int MAX_LAENGE_STR - die maximale String Länge
* int MAX_LAENGE_ARR - die maximale Array Länge
* sind input3.c auf jeweils 255 und 100 definiert
*/

int main(int argc, char **argv) {
if (argc < 3) {
printf("Aufruf: %s <anzahl> <bundesland>\n", argv[0]);
printf("Beispiel: %s 100 Bayern\n", argv[0]);
printf("Klein-/Großschreibung beachten!\n");
exit(1);
}
int anzahl = atoi(argv[1]);
char *bundesland = argv[2];

// Statisch allokierter Speicher
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];

int len = read_file("staedte.csv", staedte, laender, bewohner);

// Hier implementieren
char ** jg;
int cc = 0;
int cc_jg = 0;

for(int i = 0; i < len; i++) {
if((strcmp(bundesland, laender[i]) == 0) && (bewohner[i] >= anzahl)) {
cc ++;
}
}

jg = (char **) malloc(MAX_LAENGE_ARR*sizeof(char *));;
for (int j = 0; j < len; j++) {
jg[j] = (char*)malloc(MAX_LAENGE_STR*sizeof(char));
}

for(int i = 0; i < len; i++) {
if((strcmp(bundesland, laender[i]) == 0) && (bewohner[i] >= anzahl)) {
sprintf(jg[cc_jg], "Die Stadt %s hat %d Einwohner.", staedte[i], bewohner[i]);
cc_jg++;
}
}

// Mithilfe von write_file(...) soll das Ergebnis in die "resultat.txt"
write_file(jg, cc_jg);

// Dynamisch allozierter Speicher muss hier freigegeben werden.
for(int l = 0; l < cc; l++) {
free(jg[l]);
}
free(jg);
return 0;
}

我的问题是,如果这个程序被 Valgrind 检查,它说这个程序不能返回所有保留的存储空间,我不明白为什么会出现这个问题。

最佳答案

您运行 malloc jg[j] len 次,但只释放它 cc 次。

正确的做法是:

for(int l = 0; l < len; l++) {
free(jg[l]);
}

关于C程序通过Valgrind检查: can't return all the reserved storage space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46974775/

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