Have your tried building and running your application with the race 
detector enabled[1]? You may have a data race.

1 - https://go.dev/doc/articles/race_detector

On Sunday, September 25, 2022 at 2:16:23 PM UTC-4 Bernd Fix wrote:

> Hi folks,
>
> I am using go1.19.1 for development and see a strange panic ("invalid 
> memory address") in an application; the panic is definitely not 
> triggered by a nil dereference (the object in question is a string):
>
> key = peer.Key()
> entry, ok := tbl.recs[key]
>
> The panic happens in the second line of the code. After checking that 
> 'tbl' and 'tbl.recs' are valid (not nil), I inserted a log line in between:
>
> key = peer.Key()
> log.Printf("Key=%v", key)
> entry, ok := tbl.recs[key]
>
> Now the panic happens in the log line; the object 'key' seems to have an 
> invalid address (but I don't know how I can check if I can't access the 
> object and printf, where the new panic happens, obviously doesn't know 
> either).
>
> The 'Key()' function returns a string (there is no way to return nil 
> from a function with a string return value that I know of), so obviously 
> something strange is going on.
>
> It even got a bit stranger when I removed the log line and tried a recover:
>
> defer func() {
> if r := recover(); r != nil {
> log.Printf("key=%s", peer.Key())
> log.Printf("key=%v", key)
> }
> }()
>
> The first log line (now) works (it delivers a valid string result), but 
> the second line still panics within recovery.
>
> Maybe I should mention that the application heavily uses channels and go 
> routines; I have the subjective impression that the more go routines are 
> running the more likely the panic occurs after some time. But maybe that 
> is irrelevant.
>
> I compiled the same source with go1.18 (the earliest version that could 
> compile the code), and the panic still occurs.
>
> Is there anthing I can do to hunt down the problem? I am happy to share 
> the code (it is free software anyway) and can explain how to reproduce 
> the panic on your own machine (I guess that running the application 
> might requires some explanation).
>
> Cheers, Bernd.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/1c12eec5-470a-491c-b18f-741f34cecba6n%40googlegroups.com.

Reply via email to