读取大小无效 - C valgrind

时间:2016-10-28 11:57:27

标签: c valgrind

Sry但我很难删除它 请删除这篇文章

1 个答案:

答案 0 :(得分:1)

以下是main()中提出的解决方案:

更正错误和改进的列表:

1-在格式化输出中,将%p(专用于指针)替换为%s(专用于字符串)。

2-存储在输出字符串zeile_array[d]之前,将其分配给输出文本zeile的len,包括空终止符。

3-而不是将输出文本指针zeile复制到输出字符串zeile_array[d],使用strcpy()函数移动所有字符。

4-简化,从char指针修改临时字符串zeile,通过在堆栈中自动分配的简单char数组在内存中动态分配。

5-保护,在使用数组char *zeile_array[50];的所有项目时停止提取结果。或者只需使用MAX_LAENGE_ARR constante分配足够的数组。

// Hier implementieren
int x=0;
int d=0;
//int b=0;
//char* zeile_array=(char*) malloc (len * sizeof(char));
char *zeile_array[MAX_LAENGE_ARR]; // instead of char *zeile_array[50];
char zeile[100];
// zeile=(char*) malloc(100); // allocated memory not needed
for(x=0;x<len;x++)
{
    if(strcmp(laender[x],bundesland) == 0 && bewohner[x] >= anzahl)
    {
        // as Micheal Walz said, replace %p by %s
        sprintf(zeile, "Die Stadt %s hat %d Einwohner.",staedte[x],bewohner[x]);
        // allocate the storing item
        zeile_array[d]=(char *)malloc(strlen(zeile)+1);
        // copy the formatted text into the storing item
        strcpy(zeile_array[d],zeile);   // putting it into array
        d=d+1;
        // abort research when output array is full
        if (d >= MAX_LAENGE_ARR) break;
    }
}
//b++;
//} // remove unexpected end of block
write_file(zeile_array,d);
// free the allocated memory only
for(x=0;x<d;x++)
{
    free(zeile_array[x]);
}
// free(zeile); is no more needed