2010-09-27 70 views
1

我有memcpy/memmove改變struct FOO foo的指針的問題,它既不是src也不是函數的目的地。以下是gdb的輸出:memcpy/memmove的奇怪行爲

之前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的錯誤,所以我在尋找一個tipp,在我身邊有什麼編程錯誤造成它。

感謝

回答

4
size_t size_y = sizeof(y); 

sizeof(y)已經給你一個整個陣列的尺寸和類型應該是size_t

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

+0

+1,第二次也如果我可以for'size_t'的建議 – 2010-09-27 12:33:53

+0

謝謝,我知道這是一個這樣的小笨蛋! – Framester 2010-09-27 12:34:38

1
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字節足夠的空間!