r/ProgrammerHumor 2d ago

Meme bugIntroducedDebugging

Post image
1.1k Upvotes

120 comments sorted by

View all comments

349

u/AdBrave2400 2d ago

Is the mistake that they're allocating 1 byte and storing in a pointer to an int which is 4 bytes?

156

u/atanasius 2d ago

It's allowed to assign to a pointer if it's not dereferenced. Malloc always returns a valid pointer.

52

u/vishal340 2d ago

but accessing it will be issue right?

92

u/SoldRIP 2d ago

that's undefined.

2

u/nullpotato 1d ago

Undefined aka works fine on a dev build but explodes in release because all the debug info the compiler injects aren't there anymore.

39

u/backfire10z 2d ago

Likely not. Malloc guarantees that the passed-in size is the minimum number of bytes it allocates, but not the maximum. You’d likely get some minimum sized chunk, somewhere between 16-32 bytes depending on the system as far as I understand it.

41

u/atanasius 2d ago

Implementations are allowed to specify behavior that is otherwise undefined.

I looked up a C24 draft and it's actually stricter:

The pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to a pointer to any type of object with a fundamental alignment requirement and size less than or equal to the size requested.

So a pointer returned by malloc(1) is not necessarily valid for int*.

-3

u/p88h 1d ago

Aligned means int sized at minimum.

The actual allocated size is much bigger anyways, but it will be a multiple of 8 bytes on a 64 bit system, and 'usable' part of that will be at least 8 bytes, and typically you will be able to read at least 16 without a page fault.

3

u/Deep-Piece3181 2d ago

That’s an implementation detail it’s still 100% UB

6

u/mckenzie_keith 2d ago

You are not allowed to de-reference a pointer after freeing it.

8

u/GoddammitDontShootMe 2d ago

Gemini added that return *x; that wasn't in the original code.

7

u/mckenzie_keith 2d ago

And then flagged it as a bug. It was so eager to find the bug that it added it into the code.

2

u/Niwrats 2d ago

who's gonna stop me?