我在C中有一個memmove問題。據我所知,兩個位置都是有效的內存地址,我能夠在執行之前打印兩個內存位置的內容memmove,但是當我試圖移除時,該函數就會與SIGSEGV一起崩潰。Memmove和SIGSEGV在C中的問題
這裏是有問題的代碼:
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";
高速緩存被聲明爲浮動**,和頁面是float *含有浮標的可變大小的數組。然而,數組的大小不太可能,因爲我甚至無法將它複製到單個浮點數上,儘管頁面無疑包含一個浮點數,如頁面[0]和頁面的有效輸出所證明的那樣[1]。
Cache [0]和Cache [1](索引只會是0或1,這也是確認的)都是指向先前在一個struct對象中調用的float **緩存的指針。這可以看這裏:
float** cache[2];
cache[0] = queryOb->cache;
cache[1] = cache[0] + sizeOfCache/2;
凡sizeOfCache最初用來聲明*我們要多少尺寸浮動塊釋放calloc爲queryOb->緩存。
我無法弄清楚爲什麼這個memmove正在產生一個sigsegv,我相信它可能是從一個float *到一個float **這個memmove,但是我認爲使用這兩個索引memmove會導致它開始複製到正確的位置。
任何幫助將不勝感激!
memmove的最後一個參數是字節數 – doctorlove
我知道,我只是試圖讓它複製一個浮動,現在它不能做 – paged90