memcpy/memmove的奇怪行为
我的问题是memcpy/memmove会更改结构FOO FOO的指针,它既不是src,也不是函数的目标。以下是gdb输出: 在memmovey之前,y_temp,size_y;: 及之后:memcpy/memmove的奇怪行为,c,memory-management,memcpy,memmove,C,Memory Management,Memcpy,Memmove,我的问题是memcpy/memmove会更改结构FOO FOO的指针,它既不是src,也不是函数的目标。以下是gdb输出: 在memmovey之前,y_temp,size_y;: 及之后: (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
(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的bug,所以我在寻找一个tipp,是什么编程错误导致的
谢谢
sizeofy已经给出了整个数组的大小,类型应该是size\u t
如果执行此操作,y和指向的内存y_temp的大小将相同。你也应该确保你在正确的方向上前进。现在,y是目的地。此外,如果源和目标没有重叠,那么使用memcpy
sizeofy已经给出了整个数组的大小,类型应该是size\u t
如果执行此操作,y和指向的内存y_temp的大小将相同。你也应该确保你在正确的方向上前进。现在,y是目的地。此外,如果源和目标没有重叠,那么使用memcpy
然后你就这么做了
memmove(y, y_temp, size_y);
但是y没有足够的空间容纳所有大小的字节
然后你就这么做了
memmove(y, y_temp, size_y);
但是y没有足够的空间容纳所有大小的字节
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);