初始化指向指针的指针时出现 C++ 错误
C++ Error when Initializing a pointer to a pointer
我使用的是大code-base,所以请原谅我没有包括所有源代码。我会尽我所能总结问题,希望它足以给出一些直觉答案。
在创建指向指针的指针(用作动态指针数组)时,我在堆中某处出现错误,请参见下图 call-stack:
所有 setFrontNodes() 是:
void Node::setFrontNodes(int size) {
frontNodes = new Node*[size]; // ERROR ON THIS LINE
nFrontNodes = size;
}
我的 class 节点的 header 是:
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;
};
现在是 st运行ge 问题。该错误将 运行 经常发生。我将 运行 具有相同参数和所有内容的相同程序,错误将在那里发生,或者在 运行 期间的另一个时间发生,或者根本不会发生!这使得追踪错误变得极其困难,也导致我没有可以重复的完整代码示例。
听起来在堆上分配内存存在一些问题,但我不确定它可能是什么或如何修复它。向量不会导致错误,但在训练神经网络时会让人麻木,比如我正在使用的代码。
我 运行 内存诊断,当错误发生时我还有超过 4gb 的可用 RAM。
随时感谢!如果您还需要其他任何东西,请告诉我,但就像我说的那样,这是一个大型程序并且错误出现 运行dom 所以我正在寻找一个我可能 运行 在分配内存时遇到的一般问题在导致屏幕截图中出现 ntdll.dll!_RtlReportCriticalFailure@12() 错误的堆上。
正如 Igor Tandetnik 评论的那样,这种错误可能是由于 size
的垃圾值或由于堆已损坏。确保 size
是一个有效的数字,并确保你没有写入你不应该接触的内存(因为这可能会破坏堆)。
如果可能,您可以使用代码清理器(如 clang)来检查这一点,或者您可以使用 valgrind 等工具来查看它何时发生。
我使用的是大code-base,所以请原谅我没有包括所有源代码。我会尽我所能总结问题,希望它足以给出一些直觉答案。
在创建指向指针的指针(用作动态指针数组)时,我在堆中某处出现错误,请参见下图 call-stack:
所有 setFrontNodes() 是:
void Node::setFrontNodes(int size) {
frontNodes = new Node*[size]; // ERROR ON THIS LINE
nFrontNodes = size;
}
我的 class 节点的 header 是:
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;
};
现在是 st运行ge 问题。该错误将 运行 经常发生。我将 运行 具有相同参数和所有内容的相同程序,错误将在那里发生,或者在 运行 期间的另一个时间发生,或者根本不会发生!这使得追踪错误变得极其困难,也导致我没有可以重复的完整代码示例。
听起来在堆上分配内存存在一些问题,但我不确定它可能是什么或如何修复它。向量不会导致错误,但在训练神经网络时会让人麻木,比如我正在使用的代码。
我 运行 内存诊断,当错误发生时我还有超过 4gb 的可用 RAM。
随时感谢!如果您还需要其他任何东西,请告诉我,但就像我说的那样,这是一个大型程序并且错误出现 运行dom 所以我正在寻找一个我可能 运行 在分配内存时遇到的一般问题在导致屏幕截图中出现 ntdll.dll!_RtlReportCriticalFailure@12() 错误的堆上。
正如 Igor Tandetnik 评论的那样,这种错误可能是由于 size
的垃圾值或由于堆已损坏。确保 size
是一个有效的数字,并确保你没有写入你不应该接触的内存(因为这可能会破坏堆)。
如果可能,您可以使用代码清理器(如 clang)来检查这一点,或者您可以使用 valgrind 等工具来查看它何时发生。