void Test(struct NeuralNetwork *nn) {
printf("%f", nn->layers[1].neurons[0].internalValue);
}
稍后:
int inputs = 2;
int hiddenLayers = 3;
int outputs = 1;
struct NeuralNetwork* nn = NeuralNetwork( inputs, hiddenLayers, outputs);
printf("%f", nn->layers[1].neurons[0].internalValue); // prints correctly
Test(&nn); //access violation even tho im trying same print as above
printf打印9.0,这是我在“ NeuralNetwork()”函数中将其初始化为9.0的功能,该函数返回指针NeuralNetwork *,因此它可以正常工作。
当我致电Test时,由于尝试读取internalValue(0x9999999A)而收到读取访问冲突错误。
在NeuralNetwork函数(基本上是构造函数)中,我也这样做
nn->layers[1].neurons[0].internalValue = 9;
就在“返回nn”之前;这也是printf的打印内容。
我能够访问和编辑NeuralNetwork()函数中的所有值(该函数分配内存并初始化所有值,然后返回NeuralNetwork *),我还可以编辑和读取分配给nn的数据(如printf所示)来自NeuralNetwork()的返回。
只有在将其传递给函数时才会遇到问题。
答案 0 :(得分:4)
此行的用途:
Test(&nn);
用来调用Test
(需要指向struct NeuralNetwork
的指针)和指向struct NeuralNetwork
的指针。
通常,编译器会发出错误/警告,看起来像这样:
error: cannot convert NeuralNetwork **' to NeuralNetwork *'.
因此您最终将访问Test
函数中不应该访问的内容。
只需像这样调用Test
:
Test(nn);