[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Gm2] trouble deallocating
From: |
Gaius Mulley |
Subject: |
Re: [Gm2] trouble deallocating |
Date: |
Tue, 22 Mar 2016 11:51:29 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
Derek Wyss <address@hidden> writes:
> Hello,
>
> I'm having trouble deallocating. The program posted below compiles,
> but when I run it I get the following message:
>
> *** Error in `./a.out': free(): invalid size: 0x000000000060d3e0 ***
> Aborted
>
> If I comment out the deallocation line, it just prints out 'A' as I
> expect. Am I doing something wrong or is the compiler misbehaving?
>
> Best regards,
>
> derek
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - - - - - - - - - -
>
> MODULE SimplePointerProgram;
>
> FROM Storage IMPORT ALLOCATE, DEALLOCATE;
> FROM SYSTEM IMPORT ADR, ADDRESS;
> FROM StrIO IMPORT WriteLn, WriteString;
> FROM IO IMPORT Write;
>
> TYPE Node_Ref = POINTER TO Node;
> TYPE Node = RECORD
> char_in_node: CHAR;
> END;
>
> TYPE Char_Ptr = POINTER TO CHAR;
>
> VAR new_node: Node;
> VAR handle_for_node: Node_Ref;
>
> VAR ptr: Char_Ptr;
> VAR test_char: CHAR;
>
> BEGIN
> test_char := 'A';
>
> ALLOCATE(ptr, SIZE(CHAR));
> ptr := ADR(test_char);
>
> Write(ptr^);
> WriteLn();
>
> DEALLOCATE(ptr, SIZE(CHAR));
>
> END SimplePointerProgram.
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>
> About my computer / environment:
> Dell Latitude E5430
> DISTRIB_ID=LinuxMint
> DISTRIB_RELEASE=2
> DISTRIB_CODENAME=betsy
> DISTRIB_DESCRIPTION="LMDE 2 Betsy"
> PRETTY_NAME="Linux Mint LMDE"
> NAME="Linux Mint LMDE"
> ID=linuxmint
> ANSI_COLOR="1;31"
> Architecture: x86_64
> CPU op-mode(s): 32-bit, 64-bit
> Byte Order: Little Endian
> CPU(s): 4
> On-line CPU(s) list: 0-3
> Thread(s) per core: 2
> Core(s) per socket: 2
> Socket(s): 1
> NUMA node(s): 1
> Vendor ID: GenuineIntel
> CPU family: 6
> Model: 42
> Model name: Intel(R) Core(TM) i3-2328M CPU @ 2.20GHz
>
> gm2 -v
> Using built-in specs.
> COLLECT_GCC=gm2
> COLLECT_LTO_WRAPPER=/usr/lib/gm2/libexec/gcc//x86_64-linux-gnu/4.7.4/lto-wrapper
> Target: x86_64-linux-gnu
> Configured with: ../gm2/gcc-versionno/configure -
> -enable-languages=c,c++,gm2 --prefix=/opt/gm2 -
> -libexecdir=/usr/lib/gm2/libexec --infodir=/opt/gm2/share/info -
> -mandir=/opt/gm2/share/man --enable-threads=posix --enable-clocale=gnu
> --disable-multilib --disable-bootstrap --enable-checking -
> -enable-libgm2 --build=x86_64-linux-gnu --host=x86_64-linux-gnu
> Thread model: posix
> gcc version 4.7.4 (GCC)
Hi Derek,
ah no the program is in error - the first parameter to ALLOCATE is a VAR
parameter which assigns ptr to the allocated area. You are then
changing that to point to test_char and then attempting to deallocate
ptr
regards,
Gaius