C中Memmove和SIGSEGV的问题

C中Memmove和SIGSEGV的问题,c,segmentation-fault,memmove,C,Segmentation Fault,Memmove,我对C中的memmove有一些问题。据我所知,两个位置都是有效的内存地址,我可以在执行memmove之前打印两个内存位置的内容,但是一旦我尝试memmove,函数就会因SIGSEGV崩溃 以下是相关代码: std::cout << page[0] << "\n"; std::cout <<page[1] << "\n" ; std::cout << cache[index][cache_itr] << "\n"; memm

我对C中的memmove有一些问题。据我所知,两个位置都是有效的内存地址,我可以在执行memmove之前打印两个内存位置的内容,但是一旦我尝试memmove,函数就会因SIGSEGV崩溃

以下是相关代码:

std::cout << page[0] << "\n";
std::cout <<page[1] << "\n" ;
std::cout << cache[index][cache_itr] << "\n";

memmove(cache[index][cache_itr],page,sizeof(float));

//These lines never print.
std::cout << cache[index][cache_itr] << "\n";
std::cout << cache[index][cache_itr] << "\n";
其中,SizeOffCache最初用于声明我们要调用多少块大小为float*的块以进行查询->缓存

我一辈子都搞不明白为什么这个memmove会产生一个sigsegv,我相信这可能与memmove从一个浮点*到一个浮点**有关,但是我认为在memmove上使用两个索引会导致它开始复制到正确的位置


任何帮助都将不胜感激

Memmove的定义是

void* memmove( void* destination, const void* source, size_t num );
您正在调用函数作为

memmove(cache[index][cache_itr], page, sizeof(float);
刚才注意到,
cache[index][cache\u itr]
是当前数组元素的值 比如说(对于索引=2,cache_itr=3)位置
cache[2][3]

您需要提供指针而不是值。改成

 memmove(cache[index], page, sizeof(float));
这是有道理的


此外,编译器在编译“从整数生成指针而不进行强制转换”的代码时应该抛出警告。

memmove的最后一个参数是字节数,我知道,我现在只是想让它复制一个浮点数,这是做不到的
 memmove(cache[index], page, sizeof(float));