Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-01-2013, 20:03   #1
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
[C] Allineamento dei campi delle struct: macro che vada bene e per GCC e per Visual S

Recentemente ho avuto un problema di segmentation fault. L'applicazione compilata con GCC a 64 bit, su Linux, funzionava correttamente. Compilata a 32 bit, con l'opzione -m32, mi dava segfault.

Debuggando con GNU gdb mi sono accorto che si trattava di un problema di allineamento dei campi delle struct. Ho risolto con la seguente macro:

Codice:
#ifndef MACROS_H
#define MACROS_H

#define ATTR_ALIGNED __attribute__ ((aligned))

#endif /*MACROS_H*/
Poi, nella definizione delle struct inserisco la macro dopo ogni campo:
Codice:
typedef struct tagArrayDef
{
	void *pArray ATTR_ALIGNED;
	int countIndexes ATTR_ALIGNED;
	/*int *indexes ATTR_ALIGNED;*/
	int *sizes ATTR_ALIGNED;
	struct nodeTypeTag **indexes ATTR_ALIGNED;
} ArrayDef;
In questo modo il programma funziona correttamente e a 32 bit e a 64 bit.

Ma adesso ho il problema della portabilità. La macro va bene in GCC/Linux ma non in Visual Studio/Windows. Devo inserire delle macro di compilazione condizionale.

C'è un equivalente di "__attribute__ ((aligned))" in Visual Studio?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 12:11   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12869
Mi sembra strano tu abbia dei problemi di allineamento (i processori attuali Intel non dovrebbero avere di questi problemi, non so gli AMD).

Non capisco perché dovrebbe andare in segmentation (se non erro c'è uno specifico errore per l'accesso non allineato, diverso dal segmentation), non è che fai qualche gioco strano con i puntatori non tenendo conto delle differenze di size tra 32 e 64 bit?

Analizzando la struttura hai le seguenti dimensioni:

Codice:
@32bit:

void*          4 bytes
int            4 bytes
int*            4 bytes
nodeTypeTag**  4 bytes

Totale: 16 bytes.
Codice:
@64bit:

void*          8 bytes
int            4 bytes
int*            8 bytes
nodeTypeTag**  8 bytes

Totale: 28 bytes (non so se fa padding tra int e int*, arrivando ad occupare 32 bytes).
Tra l'altro ti consiglio di usare i tipi in stdint.h per maggiore portabilità.

Ultima modifica di WarDuck : 03-01-2013 alle 12:13.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 12:59   #3
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Pure a me sembra strano(e ci stavo impazzendo sopra). Si tratta dei sorgenti del Contest 17. Finora avevo compilato con Visual studio e il programma andava bene e a 32 bit e a 64 bit.

Compilando con GCC per linux, invece, la versione a 64 bit andava bene e la versione a 32 bit andava in crash.

Ho risolto con "__attribute__ ((aligned))".

Con visual studio si può utilizzare "__declspec(align(x))" ma va messo prima della dichiarazione della variabile. Ho risolto così:

Codice:
#ifndef MACROS_H
#define MACROS_H

#if defined(_WIN32)
  #define PREFIX_ALIGNED __declspec(align(4))
  #define SUFFIX_ALIGNED 
#else
  #define SUFFIX_ALIGNED __attribute__ ((aligned))
  #define PREFIX_ALIGNED 
#endif

#endif /*MACROS_H*/
Codice:
typedef struct tagArrayDef
{
	PREFIX_ALIGNED void *pArray SUFFIX_ALIGNED;
	PREFIX_ALIGNED int countIndexes SUFFIX_ALIGNED;
	PREFIX_ALIGNED int *sizes SUFFIX_ALIGNED;
	PREFIX_ALIGNED struct nodeTypeTag **indexes SUFFIX_ALIGNED;
} ArrayDef;

Ultima modifica di Vincenzo1968 : 03-01-2013 alle 13:04.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 13:57   #4
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Con l'accorgimento di cui sopra il programma funziona anche su Linux a 32 bit:







Senza l'accorgimento invece:

A 64 bit andava bene:







A 32 bit, segmentation fault:


Ultima modifica di Vincenzo1968 : 03-01-2013 alle 14:06.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 14:51   #5
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Che mi venga un colpo!

C'è anche la possibilità di usare "#pragma pack":

http://en.wikipedia.org/wiki/Data_structure_alignment
Quote:
While there is no standard way of defining the alignment of structure members, some compilers use #pragma directives to specify packing inside source files. Here is an example:

#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */

struct MyPackedData
{
char Data1;
long Data2;
char Data3;
};

#pragma pack(pop) /* restore original alignment from stack */

This structure would have a compiled size of 6 bytes on a 32-bit system. The above directives are available in compilers from Microsoft[1], Borland, GNU[2] and many others.
Funzionerà su entrambi i sistemi(32/64 bit) e con entrambi i compilatori(Visual Studio/GCC)?

Faccio una prova...

Ultima modifica di Vincenzo1968 : 03-01-2013 alle 14:54.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 16:18   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Concordo con WarDuck: non è possibile che un programma non funzioni per questioni di allineamento. Non è possibile su x86 e x64, che possono leggere valori completamente disallineati, ma neppure coi RISC che hanno l'obbligo di leggere le word a indirizzi allineati opportunamente, perché è il compilatore che si occupa di allineare le strutture in maniera adeguata in questi casi, per evitare a monte il problema.

Il problema è sicuramente un altro. Accertati che magari non sia un bug del GCC. E' ben noto che in passato ne abbia avuti proprio sull'allineamento, perché, ad esempio, generava codice ottimizzato per le SSE, ma senza allineare correttamente lo stack a 128 bit all'inizio di una funzione, per cui a seguito di una chiamata con lo stack disallineato, la CPU andava in segmentation fault alla prima istruzione SSE che facesse accesso alle variabili locali della funzione.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 16:30   #7
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ehm Cesare, non so che dirti.

Il fatto strano è che con Visual Studio il programma va bene a 32 e a 64 bit anche senza usare l'allineamento. Con GCC, se non uso l'allineamento, il programma a 32 bit mi crasha.
Sarà, come dici tu, un bug del GCC ma non ho trovato niente su google(ieri stavo impazzendo a forza di googlare, controllare il codice... ricontrollare il codice, rigooglare...). Fatto sta che usando l'allineamento il programma va bene per tutte le piattaforme/sistemi(32/64 bit, Visual Studio/GCC).

Boh!

Ah, il "pragma pack" non va bene. Ho provato ma con GCC/32 bit ho di nuovo il segfault.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 17:13   #8
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
E' sicuramente un bug o qualche altro motivo. Non esiste che in C si debba per forza ricorrere a direttive per l'allineamento del codice, pena la mancanza di portabilità perché il codice non funziona.

In 25 anni che ho avuto a che fare col C non m'è mai successo, e le mie applicazioni hanno girato tranquillamente su architetture a 16, 32, 64 bit, dagli 8086 ai PA-RISC di HP.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 18:38   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12869
Dal debugger si evince che p punta ad un indirizzo sballato (0x29), bisognerebbe capire come fai ad ottenere quel valore.

Per curiosità hai provato a far stampare un sizeof di quella struttura prima a 32 e poi a 64 bit e vedere se tornano i conti?
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 21:14   #10
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Faccio la prova e ti faccio sapere. Domani però che fino a poco fa ho dovuto combattere con un cliente rognosissimo e sono stanco morto.

Se vuoi dare un'occhiata ai sorgenti li trovi qui:

http://www.hwupgrade.it/forum/showpo...92&postcount=5

Prima che chiamasse 'sto rompi... avevo provato a compilare con GCC per Windows(MinGW) e il bello è che, come per Visual Studio, funzionano entrambe le versioni(32/64 bit) anche senza allineamento.

Mah!

Occhio: per compilare a 64 bit con GCC su Windows dovete utilizzare questa versione di MinGW:

http://sourceforge.net/projects/ming...urce=directory

http://mingw-w64.sourceforge.net/

Ultima modifica di Vincenzo1968 : 03-01-2013 alle 21:23.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2013, 22:41   #11
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Tipicamente queste cose capitano o perche' da qualche parte si fa una errata assunzione sulla dimensione dei tipi (strutture e/o primitive), oppure perche' c'e' un errore di memoria "latente" che si manifesta solo in alcune condizioni.
Se "aggiustando" l'allineamento la cosa si sistema, puo' essere che sfori una struct da qualche parte (sospettato numero uno: errato o mancato ridimensionamento di quell'array di dimensione uno che usi in una delle strutture). Se la struttura ha una dimensione che non e' multiplo dell'allineamento usato (e.g. allineamento a 4 byte, struttura di 10) un eventuale sforamento non ha gravi ripercussioni perche' vai a lavorare nei byte di padding. Se invece la dimensione e' giusto un multiplo puoi finire per smadonnare nella memoria di un'altra istanza, o nello stack.

Io darei una controllata con valgrind.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 14:04   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Valgrind?

Googlo un attimo, installo(se non è già installato) e ti faccio sapere.

Edit:




Ultima modifica di Vincenzo1968 : 04-01-2013 alle 14:18.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 14:25   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Valgrind?

Googlo un attimo, installo(se non è già installato) e ti faccio sapere.
E' un tool per l'analisi di eseguibili per linux e altri unix. Detto in termini poveri interpreta il codice x86 inserendo del codice aggiuntivo per verificare che non vengano effettuate "porcherie" come sforare array, leggere memoria non inizializzata e altre cose analoghe.

Non e' di immediato uso ma ci sono diversi tutorial online.

Dovresti trovarlo nel repository di ubuntu. Installa anche kcachegrind che e' un comodo tool grafico per visualizzarne i risultati (valgrind di suo e' solo da linea di comando).



Ci sono anche altri tool simili. Trovi qualche riferimento qua
http://code.google.com/p/address-san...nOfMemoryTools
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 14:37   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 14:41   #15
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da marco.r Guarda i messaggi
E' un tool per l'analisi di eseguibili per linux e altri unix. Detto in termini poveri interpreta il codice x86 inserendo del codice aggiuntivo per verificare che non vengano effettuate "porcherie" come sforare array, leggere memoria non inizializzata e altre cose analoghe.

Non e' di immediato uso ma ci sono diversi tutorial online.

Dovresti trovarlo nel repository di ubuntu. Installa anche kcachegrind che e' un comodo tool grafico per visualizzarne i risultati (valgrind di suo e' solo da linea di comando).



Ci sono anche altri tool simili. Trovi qualche riferimento qua
http://code.google.com/p/address-san...nOfMemoryTools


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 14:46   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 15:20   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Risolto: bisognava installare libc-dbg a 32 bit: libc6-dbg:i386.

Ma adesso l'output è troppo lungo per il terminale. Ho provato a redirezionare con "> output.txt" ma crea il file con solo l'output del mio programma. L'output di valgrind viene sempre stampato a video e non riesco a leggerlo tutto. Come si fa, su Linux, a redirezionare l'output su file?

Codice:
vincenzo@Ubuntu12-10-AMD64:~/Contest17$ valgrind --leak-check=yes ./Contest1732debug Files/prog01.txt > outputValgrind.txt

Ultima modifica di Vincenzo1968 : 04-01-2013 alle 15:22.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 16:08   #18
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Risolto. C'è l'opzione --log-file

Codice:
vincenzo@Ubuntu12-10-AMD64:~/Contest17$ valgrind --leak-check=yes --log-file=outValgrind.txt ./Contest1732debug Files/prog01.txt
Ecco il log:

Codice:
==30226== Memcheck, a memory error detector
==30226== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==30226== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==30226== Command: ./Contest1732debug Files/prog01.txt
==30226== Parent PID: 29996
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80584C9: Parse (parser.c:107)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202cdb is 0 bytes after a block of size 3 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80584C9: Parse (parser.c:107)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C6AD: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x8059296: var_list (parser.c:632)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x805DAD3: htFind (symtab.c:78)
==30226==    by 0x805E47B: scopeFind (symtab.c:407)
==30226==    by 0x80592EF: var_list (parser.c:641)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x805DAD3: htFind (symtab.c:78)
==30226==    by 0x805E4CB: scopeInsert (symtab.c:423)
==30226==    by 0x80593C7: var_list (parser.c:658)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x805DC0A: htInsert (symtab.c:111)
==30226==    by 0x805E53E: scopeInsert (symtab.c:429)
==30226==    by 0x80593C7: var_list (parser.c:658)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C653: strlen (mc_replace_strmem.c:399)
==30226==    by 0x805D91A: htNewNode (symtab.c:22)
==30226==    by 0x805DC8C: htInsert (symtab.c:119)
==30226==    by 0x805E53E: scopeInsert (symtab.c:429)
==30226==    by 0x80593C7: var_list (parser.c:658)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C6AD: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805D965: htNewNode (symtab.c:29)
==30226==    by 0x805DC8C: htInsert (symtab.c:119)
==30226==    by 0x805E53E: scopeInsert (symtab.c:429)
==30226==    by 0x80593C7: var_list (parser.c:658)
==30226==    by 0x805911F: decl (parser.c:581)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202d11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059136: decl (parser.c:583)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202ddd is 0 bytes after a block of size 5 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059136: decl (parser.c:583)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202e11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x805DAD3: htFind (symtab.c:78)
==30226==    by 0x805E47B: scopeFind (symtab.c:407)
==30226==    by 0x805A248: stmt (parser.c:1045)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202e11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402D2EA: strcmp (mc_replace_strmem.c:725)
==30226==    by 0x805DB0C: htFind (symtab.c:86)
==30226==    by 0x805E47B: scopeFind (symtab.c:407)
==30226==    by 0x805A248: stmt (parser.c:1045)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202e11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C6AD: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805A296: stmt (parser.c:1053)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202e11 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A941: stmt (parser.c:1248)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4202f65 is 0 bytes after a block of size 5 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A941: stmt (parser.c:1248)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203101 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x805DAD3: htFind (symtab.c:78)
==30226==    by 0x805E47B: scopeFind (symtab.c:407)
==30226==    by 0x805BD72: expr4 (parser.c:1885)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==  Address 0x4203101 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402D2EA: strcmp (mc_replace_strmem.c:725)
==30226==    by 0x805DB0C: htFind (symtab.c:86)
==30226==    by 0x805E47B: scopeFind (symtab.c:407)
==30226==    by 0x805BD72: expr4 (parser.c:1885)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==  Address 0x4203101 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C653: strlen (mc_replace_strmem.c:399)
==30226==    by 0x804C81B: id (ast.c:56)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==  Address 0x4203101 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C6AD: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x804C843: id (ast.c:57)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==  Address 0x4203101 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x805B13C: expr (parser.c:1466)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203319 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x805B13C: expr (parser.c:1466)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059CEA: stmt (parser.c:927)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203585 is 0 bytes after a block of size 5 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059CEA: stmt (parser.c:927)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x805A186: stmt (parser.c:1031)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x42035bd is 0 bytes after a block of size 5 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x805A186: stmt (parser.c:1031)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059B2B: stmt (parser.c:886)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x420377d is 0 bytes after a block of size 5 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059B2B: stmt (parser.c:886)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x8059B0C: stmt (parser.c:883)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203851 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x8059B0C: stmt (parser.c:883)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid read of size 1
==30226==    at 0x402C6AD: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805A296: stmt (parser.c:1053)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203b61 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059B2B: stmt (parser.c:886)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A7FD: stmt (parser.c:1214)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203c39 is 0 bytes after a block of size 1 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A7FD: stmt (parser.c:1214)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Invalid write of size 1
==30226==    at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226==    by 0x805CA2E: GetNextToken (scanner.c:296)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A1A5: stmt (parser.c:1034)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226==  Address 0x4203ff3 is 0 bytes after a block of size 3 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A1A5: stmt (parser.c:1034)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== Conditional jump or move depends on uninitialised value(s)
==30226==    at 0x804894C: convertToBoolean (main.c:33)
==30226==    by 0x8049294: interpret (main.c:296)
==30226==    by 0x8049A0A: interpret (main.c:430)
==30226==    by 0x8049A2D: interpret (main.c:432)
==30226==    by 0x804C6D1: main (main.c:1018)
==30226== 
==30226== Conditional jump or move depends on uninitialised value(s)
==30226==    at 0x8048951: convertToBoolean (main.c:33)
==30226==    by 0x8049294: interpret (main.c:296)
==30226==    by 0x8049A0A: interpret (main.c:430)
==30226==    by 0x8049A2D: interpret (main.c:432)
==30226==    by 0x804C6D1: main (main.c:1018)
==30226== 
==30226== Invalid read of size 4
==30226==    at 0x80499F6: interpret (main.c:430)
==30226==    by 0x804924B: interpret (main.c:297)
==30226==    by 0x8049A0A: interpret (main.c:430)
==30226==    by 0x8049A2D: interpret (main.c:432)
==30226==    by 0x804C6D1: main (main.c:1018)
==30226==  Address 0x4204044 is 0 bytes after a block of size 28 alloc'd
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C8BB: opr (ast.c:75)
==30226==    by 0x805A21D: stmt (parser.c:1042)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 
==30226== HEAP SUMMARY:
==30226==     in use at exit: 9,120 bytes in 283 blocks
==30226==   total heap usage: 320 allocs, 37 frees, 12,393 bytes allocated
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 1 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80591C2: type (parser.c:602)
==30226==    by 0x805910F: decl (parser.c:579)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 2 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805987D: code_block (parser.c:803)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 3 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059C9E: stmt (parser.c:918)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 4 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x805B13C: expr (parser.c:1466)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 5 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x8059B0C: stmt (parser.c:883)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 1 bytes in 1 blocks are definitely lost in loss record 6 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A7FD: stmt (parser.c:1214)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 7 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805AA54: stmt (parser.c:1268)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 8 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805AA54: stmt (parser.c:1268)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 9 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 10 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 11 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B141: expr (parser.c:1468)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 12 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B141: expr (parser.c:1468)
==30226==    by 0x8059CD0: stmt (parser.c:925)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 13 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059B11: stmt (parser.c:884)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 14 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059B11: stmt (parser.c:884)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 15 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x805A8AB: stmt (parser.c:1233)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 16 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805BF64: expr4 (parser.c:1934)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x805A8AB: stmt (parser.c:1233)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 17 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C826: id (ast.c:56)
==30226==    by 0x805AA54: stmt (parser.c:1268)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 2 bytes in 1 blocks are definitely lost in loss record 18 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x804C859: id (ast.c:58)
==30226==    by 0x805AA54: stmt (parser.c:1268)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 3 bytes in 1 blocks are definitely lost in loss record 19 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80584C9: Parse (parser.c:107)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 3 bytes in 1 blocks are definitely lost in loss record 20 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A941: stmt (parser.c:1248)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 3 bytes in 1 blocks are definitely lost in loss record 21 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A1A5: stmt (parser.c:1034)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 5 bytes in 1 blocks are definitely lost in loss record 22 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059136: decl (parser.c:583)
==30226==    by 0x8058984: decl_list (parser.c:357)
==30226==    by 0x8058955: program (parser.c:340)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 5 bytes in 1 blocks are definitely lost in loss record 23 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x805A941: stmt (parser.c:1248)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 5 bytes in 1 blocks are definitely lost in loss record 24 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059CEA: stmt (parser.c:927)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 5 bytes in 1 blocks are definitely lost in loss record 25 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x805A186: stmt (parser.c:1031)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 7 bytes in 2 blocks are definitely lost in loss record 26 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805CE4D: GetNextToken (scanner.c:472)
==30226==    by 0x8059B0C: stmt (parser.c:883)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 7 bytes in 2 blocks are definitely lost in loss record 27 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805B9C6: expr4 (parser.c:1765)
==30226==    by 0x805B6EB: expr3 (parser.c:1652)
==30226==    by 0x805B484: expr2 (parser.c:1573)
==30226==    by 0x805B28F: expr1 (parser.c:1505)
==30226==    by 0x805B0F8: expr (parser.c:1444)
==30226==    by 0x8059B11: stmt (parser.c:884)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226== 
==30226== 11 bytes in 3 blocks are definitely lost in loss record 28 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805C9FB: GetNextToken (scanner.c:294)
==30226==    by 0x80585BB: match (parser.c:169)
==30226==    by 0x8059B2B: stmt (parser.c:886)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x805A18B: stmt (parser.c:1032)
==30226==    by 0x8059D59: stmt (parser.c:942)
==30226==    by 0x80599C3: stmt_list (parser.c:846)
==30226==    by 0x80598B8: code_block (parser.c:810)
==30226==    by 0x8058965: program (parser.c:343)
==30226==    by 0x80584D9: Parse (parser.c:112)
==30226==    by 0x804C65F: main (main.c:995)
==30226== 
==30226== 9,036 bytes in 251 blocks are definitely lost in loss record 29 of 29
==30226==    at 0x402BE41: malloc (vg_replace_malloc.c:270)
==30226==    by 0x805E225: scopeInit (symtab.c:317)
==30226==    by 0x804C62E: main (main.c:992)
==30226== 
==30226== LEAK SUMMARY:
==30226==    definitely lost: 9,120 bytes in 283 blocks
==30226==    indirectly lost: 0 bytes in 0 blocks
==30226==      possibly lost: 0 bytes in 0 blocks
==30226==    still reachable: 0 bytes in 0 blocks
==30226==         suppressed: 0 bytes in 0 blocks
==30226== 
==30226== For counts of detected and suppressed errors, rerun with: -v
==30226== Use --track-origins=yes to see where uninitialised values come from
==30226== ERROR SUMMARY: 90 errors from 59 contexts (suppressed: 0 from 0)
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 17:14   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Il problema è nel file "mc_replace_strmem.c" o in uno dei miei file?



scanner.c:


Ultima modifica di Vincenzo1968 : 04-01-2013 alle 17:32.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2013, 19:57   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Il manuale dice che il problema si verifica nel file indicato nella prima riga dopo "Invalid write of size 1"

Quote:
Invalid write of size 1
==30226== at 0x402C6C5: strcpy (mc_replace_strmem.c:438)
==30226== by 0x805CA2E: GetNextToken (scanner.c:296)
Dunque sembrerebbe un bug di GCC. Per esserne sicuro dovrei provare a utilizzare un altro compilatore. Che compilatori ci sono su Linux oltre a GCC?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Tutte le offerte Blink in un unico posto...
OpenAI e Foxconn uniscono le forze per r...
Ricarica delle auto elettriche in 3 minu...
Lucid presenta Gravity Touring, il SUV e...
Meta è stata condannata in Spagna...
Chat di gruppo su ChatGPT: al via la fas...
Ubisoft, dietro la trimestrale rimandata...
Gli sviluppatori di Genshin Impact hanno...
Poltronesofà colpita da ransomwar...
FSD e Autopilot: Tesla aggiorna i dati c...
Conclusa la campagna di osservazione del...
Il punto della situazione sulle offerte ...
Windows compie 40 anni, tra conquiste e ...
Black Friday Smartwatch: Amazfit, Apple,...
Operativo il primo Tesla Supercharger te...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v