Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Programming
»
General
»
Application crash after Line: 32
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
Forum Rules
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
What's wrong with my appl...
by
cdbc
[
Today
at 06:41:03 am]
AdvancedHTTPServer: A Go-...
by
egsuh
[
Today
at 06:25:59 am]
Unit decfloat
by
srvaldez
[
Today
at 12:14:43 am]
Access violation during d...
by
Martin_fr
[January 19, 2026, 08:02:11 pm]
Adjacent rectangles not a...
by
jamie
[January 19, 2026, 06:21:09 pm]
Developing FreePascal on ...
by
HKPhysicist
[January 19, 2026, 03:53:13 pm]
Cross Compile for Dos on ...
by
andersonscinfo
[January 19, 2026, 03:49:40 pm]
Very simple Style Manager...
by
zamtmn
[January 19, 2026, 02:53:11 pm]
Assigning firebird file n...
by
egsuh
[January 19, 2026, 10:18:22 am]
Strings in Free Pascal: I...
by
Thaddy
[January 19, 2026, 07:43:13 am]
Postgres, ZEOS and Visual...
by
Thaddy
[January 19, 2026, 07:00:03 am]
Feature announcement: Fun...
by
Thaddy
[January 19, 2026, 06:55:15 am]
[SOLVED] Strange behavior...
by
jamie
[January 19, 2026, 12:08:12 am]
ThemeServices.OnThemeChan...
by
sgj
[January 18, 2026, 10:37:32 pm]
AVRPascal – free code edi...
by
ackarwow
[January 18, 2026, 10:18:12 pm]
help implementing frexp
by
srvaldez
[January 18, 2026, 09:25:07 pm]
my implementation of frex...
by
srvaldez
[January 18, 2026, 06:27:39 pm]
Rolling releases Lazarus[...
by
Martin_fr
[January 18, 2026, 04:37:42 pm]
Question about optimizer ...
by
PascalDragon
[January 18, 2026, 04:01:54 pm]
How to set the Excel cell...
by
dodgex
[January 18, 2026, 02:06:25 pm]
PeaZip project turns 20 t...
by
JanRoza
[January 18, 2026, 01:57:46 pm]
How to implement multiple...
by
bills
[January 18, 2026, 01:26:29 pm]
RPNCalc in Lazarus
by
jwdietrich
[January 18, 2026, 12:13:43 pm]
Is this Pascal Compiler t...
by
HKPhysicist
[January 18, 2026, 11:11:59 am]
Maze Makers: Modified Cyl...
by
Boleeman
[January 18, 2026, 08:51:29 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Application crash after Line: 32 (Read 1090 times)
paule32
Hero Member
Posts: 645
One in all. But, not all in one.
Application crash after Line: 32
«
on:
February 29, 2024, 11:17:26 pm »
Hello,
the Code above produce me an Application Crash after Line: 32.
How can I fix this ?
The Code, I use it under Windows 10 64-Bit.
Code: Pascal
[Select]
[+]
[-]
procedure
fpc_ansistr_assign
(
var
DestS
:
Pointer
;
S2
:
Pointer
)
;
[
public
,
alias
:
'FPC_ANSISTR_ASSIGN'
]
;
compilerproc
;
begin
MessageBox
(
0
,
LPCSTR
(
S2
)
,
'0 0 0 0 0'
,
0
)
;
DestS
:
=
malloc
(
200
)
;
{$ASMMODE INTEL}
asm
mov rsi
,
S2
// src string
mov rdi
,
DestS
// dst string
xor
rax
,
rax
// counter for string length
@
findLength
:
cmp
byte
ptr
[
rsi
+
rax
]
,
0
je
@
copyInit
// null terminator
inc rax
jmp
@
findLength
@
copyInit
:
mov rcx
,
rax
// rcx now holds the length of the string
@
copyLoop
:
test rcx
,
rcx
// check if RCX is empty
jz
@
endCopy
// when yes => done.
dec rcx
mov al
,
[
rsi
+
rcx
]
// load byte from src in AL
mov
[
rdi
+
rcx
]
,
al
// store byte into dst
jmp
@
copyLoop
// to next charcter
@
endCopy
:
mov
byte
ptr
[
rdi
+
rax
]
,
0
// null-terminated dst string
end
;
MessageBox
(
0
,
LPCSTR
(
S2
)
,
'1 1 0 1 0'
,
0
)
;
MessageBox
(
0
,
LPCSTR
(
DestS
)
,
'0 0 0 0 0'
,
0
)
;
end
;
Logged
MS-IIS - Internet Information Server, Apache, PHP/HTML/CSS, MinGW-32/64 MSys2 GNU C/C++ 13 (-stdc++20), FPC 3.2.2
A Friend in need, is a Friend indeed.
rvk
Hero Member
Posts: 6922
Re: Application crash after Line: 32
«
Reply #1 on:
February 29, 2024, 11:30:28 pm »
fpc_ansistr_assign is normally an essential part of the RTL.
In that procedure you can messagebox multiple times.
Are you absolutely sure those functions don't call fpc_ansistr_assign themselves because then you get an infinite loop.
Remove the messageboxes.
Does it still crash?
If so... On what line?
Logged
paule32
Hero Member
Posts: 645
One in all. But, not all in one.
Re: Application crash after Line: 32
«
Reply #2 on:
February 29, 2024, 11:34:13 pm »
the Function will not call it'self.
The first, and second MessageBox will be pop out on screen.
So, there is no Loop.
But the DestS seems be not valide
Logged
MS-IIS - Internet Information Server, Apache, PHP/HTML/CSS, MinGW-32/64 MSys2 GNU C/C++ 13 (-stdc++20), FPC 3.2.2
A Friend in need, is a Friend indeed.
KodeZwerg
Hero Member
Posts: 2269
Fifty shades of code.
Re: Application crash after Line: 32
«
Reply #3 on:
February 29, 2024, 11:45:50 pm »
I just transaled your asm back to pascal to find out things, here it works okay.
Code: Pascal
[Select]
[+]
[-]
procedure
FPC_ANSISTR_ASSIGN
(
var
DestS
:
PChar
;
S2
:
PChar
)
;
var
Len
:
Integer
;
begin
MessageBox
(
0
,
S2
,
'0 0 0 0 0'
,
0
)
;
GetMem
(
DestS
,
200
)
;
try
Len
:
=
0
;
while
S2
[
Len
]
<>
#0
do
Inc
(
Len
)
;
Move
(
S2
^
,
DestS
^
,
Len
)
;
DestS
[
Len
]
:
=
#0
;
finally
// FreeMem(DestS); // must be done outside else the pointer is garbage after method runs out of scope
end
;
MessageBox
(
0
,
S2
,
'1 1 0 1 0'
,
0
)
;
MessageBox
(
0
,
DestS
,
'0 0 0 0 0'
,
0
)
;
end
;
Logged
«
Last Edit:
Tomorrow
at 31:76:97 xm by
KodeZwerg
»
jamie
Hero Member
Posts: 7493
Re: Application crash after Line: 32
«
Reply #4 on:
March 01, 2024, 01:05:59 am »
Lots of holes on that ASM code.... it's like the slit experiment!
Logged
The only true wisdom is knowing you know nothing
ASerge
Hero Member
Posts: 2475
Re: Application crash after Line: 32
«
Reply #5 on:
March 01, 2024, 01:57:37 am »
Quote from: jamie on March 01, 2024, 01:05:59 am
Lots of holes on that ASM code.... it's like the slit experiment!
I agree. Better FPC code:
Code: Pascal
[Select]
[+]
[-]
procedure
FPC_ANSISTR_ASSIGN
(
out DestS
:
PAnsiChar
;
S2
:
PAnsiChar
)
;
var
Len
:
SizeInt
;
begin
DestS
:
=
nil
;
if
S2
=
nil
then
Exit
;
Len
:
=
IndexByte
(
S2
^
,
-
1
,
0
)
;
if
Len >
0
then
// the only #0 is ignored
begin
Inc
(
Len
)
;
// + #0
GetMem
(
DestS
,
Len
)
;
Move
(
S2
^
,
DestS
^
,
Len
)
;
end
;
end
;
Logged
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Programming
»
General
»
Application crash after Line: 32
TinyPortal
© 2005-2018