After working with C for a while, I feel like I understand C relatively less than before. I’m going to put this in the context of my
vlmap ordered map data structure. Here’s a code snippet to start off:
uint8_t* key = "foo"; int keylength = 3; uint8_t* val = "bar"; int vallength = 3; vlmap* m = vlmap_create(); vlmap_insert(m, key, keylength, val, vallength);
I’ve modified the original code for simplicity. It’s simply inserting a key-value pair.
Here’s my confusion: where do
value live? On the stack, right? They’re just fixed-length character arrays. I don’t think I can just use those arrays directly in my data structure since, being stack-allocated, they’ll disappear when the function ends. If this is indeed the case, then I’ll have to do a
memcpy into a
malloc’d region of memory, and eventually I have to
My memory’s rather poor. I barely remember how some of those
vlmap functions work, but that’s the result of being in the zone late at night :). I wasn’t copying over the strings initially and everything seemed fine. I thought it was because my entire test was running in
main(), so I moved the key and value declarations into a function and set them in the map. They’re still stack-allocated in that function, right? If they are, I would run the test and it should fail because those values would’ve been overwritten. I don’t think it did. Huh?!
Then again, there might be a simple explanation for all of this, or I may be remembering things wrong. In any case, I’m not feeling confident about my C memory management skills!