簡體   English   中英

memcpy / memmove的奇怪行為

[英]Strange behavior of memcpy/memmove

我遇到的問題是memcpy / memmove更改了struct FOO foo的指針,該指針既不是src也不是函數的目的地。 以下是gdb輸出:

memmove(y,y_temp,size_y);之前memmove(y,y_temp,size_y);

(gdb) p y
$38 = 0xbff7a2e0
(gdb) p y_temp
$39 = (float *) 0x815ea20
(gdb) p foo
$40 = (FOO *) 0x81d4e90

之后:

(gdb) p y_temp
$41 = (float *) 0x343434
(gdb) p y 
$42 = 0x343434 
(gdb) p foo
$43 = (FOO *) 0x343434

以下是變量的定義:

FOO *foo;
float y[nsamples];
float size_y = nsamples*sizeof(y);
float* y_temp = (float*) malloc(size_y);

我知道,這不是memcpy / move的錯誤,所以我想找個技巧,我這邊發生了什么編程錯誤。

謝謝

size_t size_y = sizeof(y);

sizeof(y)已經為您提供了整個數組的大小,類型應該為size_t

如果這樣做, y和指向y_temp的內存將具有相同的大小。 您還應該確保您朝着正確的方向前進。 現在,y是目的地。 另外,如果源和目標不重疊(它們不會在此處重疊),請使用memcpy

float y[nsamples];
/* let's say a float is 4 bytes and nsamples is 13 */
float size_y = nsamples*sizeof(y);
/* size_y is now 13 * 52 == 676 */

然后你做

memmove(y, y_temp, size_y);

但是y沒有足夠的空間來容納所有size_y字節!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM