1
私は、文字列と配列を使用してcsvファイルからtxtファイルを出力する次のコードを持っています。また、 "input3.h"ファイルをTXTに転送します。このプログラムの開発は、Valgrindのによって確認された場合、それはこのプログラムの開発はすべて予約済みのストレージスペースを返すことができない、と私は、この問題のexcistを行う理由を理解していないことを言っていることValgrindによるC programmチェック:すべての予約済みストレージスペースを返すことができません
#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;
}
私の問題、それを。
[コンプリート**、最小**、かつ検証例](http://stackoverflow.com/help/mcve)。 'MAX_LAENGE_ARR'とは何ですか? 'MAX_LAENGE_STR'とは何ですか?それらはどう定義されていますか?彼らの価値は何ですか? –
あなたは 'len'ポインタを割り当てますが、' cc'ポインタだけを割り当てます。 –
文字列と配列の最大長として定義されます。 'MAX_LAENGE_STR'の値は255で、' MAX_LAENGE_ARR'は100です。 – Ryoine