Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 543813
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T10:35:24+00:00 2026-05-13T10:35:24+00:00

In the following method, FreeMem(), throws an EAccessViolation. What are the possible reasons? procedure

  • 0

In the following method, FreeMem(), throws an EAccessViolation. What are the possible reasons?

procedure TCustomDataset.FreeRecordBuffer(var Buffer: PChar);
begin
  FreeMem(Buffer);
end;

EDIT:
As far as I understand TDataset Buffers are only allocated in:

function TCustomDataset.AllocRecordBuffer: PChar;
begin
    Result := AllocMem(GetBufferSize);
end;

and only freed in FreeRecordBuffer()

Now I’ve checked and in my case 2 buffers are allocated, the first one gets freed without a hitch, but the second causes FreeMem() to throw a EAccessViolation. I’ve also check(by writing down the pointer addresses) that both the address were given by AllocRecordBuffer() are passed to FreeRecordBuffer() and nothing else.

According to Delphi Basics FreeMem() should only throw an EInvalidPointer when the pointer is invalid.

EDIT: Found the problem, I overwrote memory.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T10:35:24+00:00Added an answer on May 13, 2026 at 10:35 am

    Basically what happened was I wrote over the end of the memory buffer I allocated and this somehow caused Free() to EAccessError.

    This could be because both buffers were adjacent in memory(strangly they were 4 bytes appart) and by writing over the end I overwrote some information stored by delphi before each buffer in the second buffer, thereby possibly making the buffer think it’s longer than it actually is and causing it to try and free memory that doesn’t belong to the program.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following Action method. public ActionResult Action() { var model = new
The following method does not work because the inner block declares a variable of
The following method does not compile. Visual Studio warns An out parameter may not
Say we have the following method: private MyObject foo = new MyObject(); // and
Why does the following method hang? public void pipe(Reader in, Writer out) { CharBuffer
I'm using the following method to send mail from Python using SMTP. Is it
Consider the following method signatures: public fooMethod (Foo[] foos) { /*...*/ } and public
I am using the following method: set_browser_log_level 'off' but my log level continues to
I am using the following method to browse for a file: OpenFileDialog.ShowDialog() PictureNameTextEdit.Text =
I have the following method in my code: private bool GenerateZipFile(List<FileInfo> filesToArchive, DateTime archiveDate)

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.