Я использую большую кодовую базу, так что извините, что я не включил весь исходный код. Я подытожу эту проблему как можно лучше, и, надеюсь, этого достаточно, чтобы дать некоторую интуицию в ответ.
При создании указателя на указатель (используется как динамический массив указателей) я получаю ошибку где-то в куче, см. Изображение ниже для стека вызовов:
все setFrontNodes ():
void Node::setFrontNodes(int size) {
frontNodes = new Node*[size]; // ERROR ON THIS LINE
nFrontNodes = size;
}
Где заголовок для моего класса Node:
class Node {
public:
~Node();
int nBackNodes;
int nFrontNodes;
Node** backNodes;
Node** frontNodes;
void setFrontNodes(int size);
void setBackNodes(int size);
double value;
double valuePrime;
ActivationFunction* activationFunction = NULL;
InitWeightMethod* initWeightMethod = NULL;
void initWeights(double multiplier);
double bias;
double deltaBias;
double* weights;
double* deltaWeights;
double errorGradient;
Node(int number);
void forwardProp();
int number;
string label;
int layer;
};
Теперь вот странная проблема. Ошибка произойдет случайно. Я буду запускать ту же программу с теми же параметрами и всем остальным, и ошибка будет или там, или в другое время во время работы, или вообще не будет! Это крайне затрудняет отслеживание ошибки и почему у меня нет полного примера кода, который можно повторить.
Звучит так, будто есть какая-то проблема с выделением памяти в куче, хотя я не уверен, что это может быть или как это исправить. Векторы не вызывают ошибок, но очень медлительны при обучении нейронных сетей, таких как код, для которого я использую.
Я выполнил диагностику памяти, и у меня все еще остается более 4 ГБ свободной памяти, когда происходит ошибка.
Спасибо за любое время! Дайте мне знать, если вы хотите что-нибудь еще, но, как я уже сказал, это большая программа, и ошибка выглядит случайной, поэтому я ищу общую проблему, с которой я мог столкнуться при выделении памяти в куче, которая вызывает ntdll.dll ! _RtlReportCriticalFailure @ 12 () ошибка на скриншоте.