layers[1].neurons[0].internalValue); } 后-6ren">
gpt4 book ai didi

c - 作为参数传递时结构搞砸了

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:10 25 4
gpt4 key购买 nike

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* 的“NeuralNetwork()”函数中将其初始化的值,因此它可以正常工作。

当我调用测试时,由于尝试读取 internalValue (0x9999999A) ​​而出现读取访问冲突错误。

在 NeuralNetwork 函数(基本上是构造函数)中,我也是这样做的

nn->layers[1].neurons[0].internalValue = 9;

就在“return nn;”之前这也是 printf 打印的内容。

我能够访问和编辑 NeuralNetwork() 函数(分配内存并初始化所有值然后返回 NeuralNetwork*)中的所有值,我还可以编辑和读取分配给 nn 的数据(由 printf 显示)来自 NeuralNetwork() 的返回。

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

最佳答案

你用这条线做什么:

Test(&nn);

是用指向struct NeuralNetwork 的指针调用Test(它接受指向struct NeuralNetwork 的指针)。通常,编译器会发出如下所示的错误/警告:

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

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

像这样调用测试:

Test(nn);

关于c - 作为参数传递时结构搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52049974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com