我陷入了一個奇怪的問題。我有一個使用gyp項目創建的exe文件,並且common.gypi支持爲32位和64位linux構建exe文件。但是,當我構建64位Linux並在代碼中的某個位置調用memcpy時,內容將被清零。使用-m32標誌爲32位平臺構建不會導致此問題。我懷疑這個頭文件可能存在問題,因爲這個項目的頭文件在32位和64位平臺上都很常見。有人可以提供一些指導如何解決這個問題?二進制文件是動態鏈接的,使用GLIBC lgcc,lc和lm。任何在這方面的指針都非常感謝。 我很樂意提供所需的任何其他信息。 謝謝。使用64位Linux的memcpy清零內容
UPDATE:代碼片段的點點滴滴: 這是代碼的基本片段:
dst->flags = src->flags;
src->b = dst->b;
and few more assignments
memcpy(dst, src, size here is 152);
size of dst is 224 and size of src is 496.
的問題是,最初被複制到DST被調用的memcpy後變爲零標誌的值。爲32bit構建時的相同邏輯工作得很好。
不可能回答這麼具體的問題。 Memcpy會複製記憶,無論如何,這都是關於它的。如果它看起來沒有 - 其他地方有一個錯誤。你可以使用valgrind來追蹤內存訪問錯誤。 – keltar 2014-10-29 07:04:16
我實際上將我的32位設置移植到了64位,我所做的只是從項目中刪除了-m32標誌,用於64位構建,我希望這能夠工作。我可能會給valgrind一個鏡頭,但是它不應該確定內存泄漏嗎?我也嘗試在函數中直接使用memcpy,包括字符串頭文件,但仍然沒有解決問題。我唯一懷疑它可能是因爲src和dest的大小不同,並且定義的某個地方可能會搞亂這些結構。 – 2014-10-29 07:16:26
如果以前不明顯的問題並不意味着它不存在。或代碼不適合64位方案,例如它意味着sizeof(size_t)== sizeof(int)。 Valgrind有許多工具,你需要的是memcheck。 – keltar 2014-10-29 07:23:53