Are the structures you use (that is, the contents of multiboot.h) also the same found in the tutorial? I simply downloaded the multiboot.h file from the grub sources, which turned out to be a bad idea for various reasons, one of which is a problem that appears to be somewhat similar to yours. I'm not sure it's the exact same issue, but it's similar enough that I thought it might be worth sharing. I wrote my memory mapping code based on the example from the multiboot specification as well (though in my case it isn't copy-and-paste, which would have been problematic due to some details of my setup, including the fact that I have no printf yet). Notice that I got similar nonsense while trying to read grub's memory map:
http://www.flickr.com/photos/113162334@N04/11698219393/
But I also noticed that the upper half of "length" looked like what I expected to find in "type", that "size" was what I expected in every case, and so perhaps there was some sense to the other numbers. Perhaps they may just be out of order. (As an aside, that's what prompted the "Sanity check" seen in the screenshot -- I wanted to double check that my function to print out numbers was actually working and that something like endianness wasn't biting me in the butt...)
This is where I come back to multiboot.h: The copy provided by grub ends the multiboot_mmap_entry struct with "GRUB_PACKED" (which isn't defined anywhere in the file; I assume it references some other part of grub source). Replacing it with (or defining it as) "__attribute__((packed))" provided a quick and effective solution:
http://www.flickr.com/photos/113162334@N04/11698350164/
The packed attribute is correctly set in the multiboot.h code in the specification document, so that's the best route to go in order to avoid any problems...