Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 541
  • Last Modified:

"Freemem" statement now gives "Invalid Pointer Operation". Used to work OK.

Hello Experts... I have a routine which would read a "chunk" of bytes from a file using a stream, do a bit of processing, then write that chunk to an output stream.. and repeat this till nothing left to read. Before the read I have these statements:

    Chunksize := 2048000;
    GetMem(CopyBuffer, ChunkSize); // CopyBuffer is defined as a PChar

And I do the read as such:

ibytesOK:=InfileStream.Read(CopyBuffer^, ChunkSize);

At the end when cleaning things up and closing files, I have this statement:

FreeMem(CopyBuffer, Chunksize);


This all used to work fine, until I just added some code that steps through the CopyBuffer a bit, looking for a #13 character:

while CopyBuffer^ <> #13 do  
       Inc(CopyBuffer);

Now when I run it, it crashes on the FreeMem(CopyBuffer, Chunksize); statement giving "Invalid Pointer Operation". Any idea how to remedy this, anyone?

Thanks!
    Shawn
0
shawn857
Asked:
shawn857
1 Solution
 
Sinisa VukCommented:
CopyBuffer is a pointer variable - point to some memory block. You must never use it in such operation which can "force" to "point" to somewhere else. This Inc function is one of them. Rather use temporary pointer:

ptr: PChar;
len: Integer;
begin
...
ptr := CopyBuffer; //copy point location
len := 0;
while (ptr^ <> #13) and (len < ChunkSize) do   //chk length too
begin
     Inc(ptr);
     Inc(len);
end;

//use ptr after that....
...

//free mem
ptr := nil;
FreeMem(CopyBuffer);
end;

Open in new window


...always check if pointer location is nor run over....(ChunkSize)
0
 
shawn857Author Commented:
ahh you are right Sinisa... thank you my friend!

Cheers
   Shawn
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now