作为参数传递时,结构弄乱了

时间:2018-08-28 04:12:55

标签: c function pointers

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()的返回。

只有在将其传递给函数时才会遇到问题。

1 个答案:

答案 0 :(得分:4)

此行的用途:

Test(&nn);

用来调用Test(需要指向struct NeuralNetwork的指针)和指向struct NeuralNetwork的指针。 通常,编译器会发出错误/警告,看起来像这样:

 error: cannot convert NeuralNetwork **' to NeuralNetwork *'.

因此您最终将访问Test函数中不应该访问的内容。

只需像这样调用Test

Test(nn);