У меня возникли проблемы с memmove в 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";
Кэш объявляется как поплавок **, и страница с плавающей точкой *, который содержит массив переменного размера поплавков. Однако размер массива, являющегося проблемой, маловероятен, поскольку я даже не могу его скопировать по одному плаву, несмотря на то, что страница, несомненно, содержит поплавок, о чем свидетельствует действительная печать из обеих страниц [0] и страницы [1].
Кэш [0] и кэш [1] (индекс будет только когда-либо равным 0 или 1, это также подтверждено) являются указателями на ранее запрограммированный кеш float ** внутри объекта struct. Это можно увидеть здесь:
float** cache[2];
cache[0] = queryOb->cache;
cache[1] = cache[0] + sizeOfCache/2;
Где sizeOfCache первоначально используется, чтобы объявить, сколько блоков размера поплавка * мы хотим calloc для queryOb-> кэша.
Я не могу понять всю жизнь, почему эта memmove производит сигсегв, я полагаю, что это может быть связано с memmove от float * до float **, однако я думал, используя два индекса на memmove заставит его начать копирование в нужное место.
Любая помощь была бы высоко оценена!
Последний параметр memmove - это количество байтов – doctorlove
Я знаю, я просто пытаюсь заставить его скопировать один плавающий прямо сейчас, чего он не может сделать – paged90