Вы неправильно вычисляете свои адреса в memcpy
. Начиная с arr
как int *
, вы добавляете число целых чисел для продвижения указателя, а не количество байтов.
Один из способов исправить это - просто позволить компилятору вычислить адреса:
memcpy(&arr[i], &nums2[c2], INTSIZE*(nums2Size-c2));
Или, придерживаясь указателя математики,
memcpy(arr + i, nums2 + c2, INTSIZE*(nums2Size-c2));
Последний параметр - это число байтов для копирования, поэтому число целых чисел необходимо изменить на количество байтов.
В обоих случаях я настроил второй параметр, чтобы начать копирование с правильного элемента в массиве nums2
.
Тогда спросите себя: что произойдет, если c2
достигнет nums2Size
? Вы в настоящее время не рассматриваете это дело.
Проблема в том, что это не данные, которые вы хотите видеть, а результат выполнения некоторого кода. В .Net свойства на самом деле являются просто скрытыми методами, поэтому для получения значения свойства Visual Studio необходимо выполнить код приложения (эта функция известна как FuncEval).
Этот код должен выполняться в каком-то потоке, и VS делает для этого один из потоков приложения. Существует ряд ситуаций , когда VS не может запустить код для получения результата, и именно тогда вы видите сообщения об ошибках, о которых вы говорите.
Я знаю, что это клудж, но я доволен тем, как это работает. В конце моего метода Main (), который изначально запускает все и создает все другие структуры данных и потоки, а затем завершает работу, я вставляю это: прикрепить точку останова на фигурной скобке {. Программа ломается. У меня есть доступный поток и ссылка на все, поэтому я могу легко просматривать все структуры данных и все потоки, видеть все везде.