Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Weird pointer issues

Open
#3 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Active
Tech stack
c
Domain
backend

Research direction

Reproduce the call at src/mapgenerator.c:1322 under gdb, then read the ht_put expansion and implementation around src/ht.h:563. Compare how start reaches ht__put and determine why the observed key differs; done means the pointer behavior is explained and the reported segmentation fault or argument discrepancy is corrected.

Written by the indexing model from the issue text.

Description

I'm having a very strange issue and I don't know how to further debug. I'm trying to implement this hashtable into some code I wrote (in my "sprites" repo branch "htbroken") and the key pointer argument is changing when I step into the "ht__put" function with a debugger. Here's the relevant section of code just copy pasted:

struct coord
{
    int x;
    int y;
};
Ht(struct coord *, struct coord *) camefrom =
    {
        .count = 0,
        .hasheq = ht_mem_hasheq,
        .impl_filled_slots = 0,
        .impl_capacity = 0,
    };

    Ht(struct coord *, float *) costsofar =
    {
        .count = 0,
        .hasheq = ht_mem_hasheq,
        .impl_filled_slots = 0,
        .impl_capacity = 0,
    };

    float *dist = NULL;
    int i;
    *no = 0;
    pq_insert(frontier, 0, start);

    *ht_put(&camefrom, start) = start;

I put the initializations for the ht structs (i.e. .count = 0, .impl_filled_slots = 0) because it was seg faulting after picking up some garbage from memory I guess.
I run this in gdb and add a break point at that first "ht_put":

(gdb) break mapgenerator.c:1322
Breakpoint 1 at 0x1817a: file src/mapgenerator.c, line 1322.
(gdb) run

...

1322        *ht_put(&camefrom, start) = start;
(gdb) print start
$1 = (struct coord *) 0x7fffffffd670
(gdb) s
ht__put (ht=0x7fffffffd530, key=0x7fffffffd590, l=...) at src/ht.h:563
563         ht__expand(ht, l);

You can see I put "start" in as a key, it ends in d670. Then the "key" argument comes out ending with d590. I am totally at a loss here. Maybe there some macro stuff I'm not understanding?

Dominant language
C++
Stars
359
Forks
2
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from tsoding/ht.h

All issues in tsoding/ht.h

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.