valgrind --leak-check=full software/IParse software/c.gr others/scan.pc -p scan_pc_output
==9186== Memcheck, a memory error detector
==9186== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==9186== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==9186== Command: software/IParse software/c.gr others/scan.pc -p scan_pc_output
==9186==
Iparse, Version: 1.7 of February 17, 2021.
Processing: software/c.gr
==9186== Mismatched free() / delete / delete []
==9186== at 0x4C336CE: operator delete(void*, unsigned long) (vg_replace_malloc.c:593)
==9186== by 0x11F41C: BTParser::free_solutions() (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11F6CA: BTParser::parse(TextFileBuffer const&, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x13CF7E: main (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== Address 0x5be5980 is 0 bytes inside a block of size 55,424 alloc'd
==9186== at 0x4C32BCF: operator new[](unsigned long) (vg_replace_malloc.c:431)
==9186== by 0x11F30D: BTParser::init_solutions() (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11F615: BTParser::parse(TextFileBuffer const&, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x13CF7E: main (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186==
==9186== Mismatched free() / delete / delete []
==9186== at 0x4C336CE: operator delete(void*, unsigned long) (vg_replace_malloc.c:593)
==9186== by 0x13E1EF: TextFileBuffer::release() (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x13CFC5: main (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== Address 0x5bdb830 is 0 bytes inside a block of size 6,928 alloc'd
==9186== at 0x4C32BCF: operator new[](unsigned long) (vg_replace_malloc.c:431)
==9186== by 0x12F3E8: PlainFileReader::read(_IO_FILE*, TextFileBuffer&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x13CB77: main (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186==
Processing: others/scan.pc
Processing: -p
tree:
--------------
==9186==
==9186== HEAP SUMMARY:
==9186== in use at exit: 643,065 bytes in 19,135 blocks
==9186== total heap usage: 44,380 allocs, 25,245 frees, 2,382,641 bytes allocated
==9186==
==9186== 4,760 bytes in 119 blocks are definitely lost in loss record 1,517 of 1,545
==9186== at 0x4C31E83: malloc (vg_replace_malloc.c:307)
==9186== by 0x10B2E1: tree_t::operator new(unsigned long) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x10C8AE: AbstractParseTree::createIdent(Ident) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x13D9B6: AbstractParseTree::operator=(Ident) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x10F1FE: BasicScanner::accept_ident(TextFileBuffer&, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x10EC2D: BasicScanner::acceptTerminal(TextFileBuffer&, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11BCA1: BTParser::parse_term(GrammarTerminal*, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11D58D: BTParser::parse_rule(GrammarRule*, ParsedValue*, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11C619: BTParser::parse_nt(GrammarNonTerminal*, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11D61C: BTParser::parse_rule(GrammarRule*, ParsedValue*, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11CBAA: BTParser::parse_or(GrammarOrRule*, ParsedValue*, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186== by 0x11EDC1: BTParser::parse_seq(GrammarRule*, char const*, AbstractParseTree, ParsedValue*, Ident, AbstractParseTree&) (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186==
==9186== 66,470 (13,120 direct, 53,350 indirect) bytes in 2 blocks are definitely lost in loss record 1,545 of 1,545
==9186== at 0x4C324E2: operator new(unsigned long) (vg_replace_malloc.c:342)
==9186== by 0x13CBBB: main (in /home/mingo/dev/c/A_grammars/IParse-0/software/IParse)
==9186==
==9186== LEAK SUMMARY:
==9186== definitely lost: 17,880 bytes in 121 blocks
==9186== indirectly lost: 53,350 bytes in 1,099 blocks
==9186== possibly lost: 0 bytes in 0 blocks
==9186== still reachable: 571,835 bytes in 17,915 blocks
==9186== suppressed: 0 bytes in 0 blocks
==9186== Reachable blocks (those to which a pointer was found) are not shown.
==9186== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==9186==
==9186== For lists of detected and suppressed errors, rerun with: -s
==9186== ERROR SUMMARY: 6 errors from 4 contexts (suppressed: 0 from 0)
@@ -7,11 +7,11 @@ class TextFileBuffer : public TextFilePos
{
public:
TextFileBuffer();
void assign(const char* str, unsigned long len, bool utf8encoded = false);
- void release() { delete (char*)_buffer; _buffer = 0; }
+ void release() { delete [] (char*)_buffer; _buffer = 0; }
unsigned long length() { return _len; }
TextFileBuffer& operator=(const TextFileBuffer& lhs)
{
assign(lhs._buffer, lhs._len, lhs._utf8encoded);
@@ -583,11 +583,11 @@ void BTParser::free_solutions()
{ ParseSolution* next_sol = sol->next;
delete sol;
sol = next_sol;
}
}
- delete _solutions;
+ delete [] _solutions;
_solutions = 0;
}
ParseSolution* BTParser::find_solution(unsigned long filepos, Ident nt)
{
@@ -756,10 +756,12 @@ int main(int argc, char *argv[])
{
parser->printExpected(stdout, filename, textBuffer);
return 0;
}
textBuffer.release();
+ delete parser;
+ delete scanner;
tree.attach(new_tree);
fclose(fin);
}