Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
memcpy/memmove的奇怪行为_C_Memory Management_Memcpy_Memmove - Fatal编程技术网

memcpy/memmove的奇怪行为

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

我的问题是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 = 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);