структура испорчена при передаче в качестве аргумента - PullRequest
0 голосов
/ 28 августа 2018
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 *, поэтому он работает правильно.

Когда я вызываю Test, я получаю ошибку нарушения прав доступа для чтения при попытке прочитать internalValue (0x9999999A).

В функции NeuralNetwork (конструктор в основном) я также делаю

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

прямо перед "return nn;" что также печатает printf.

Я могу получить доступ и отредактировать все значения в функции NeuralNetwork () (которая распределяет память и инициализирует все значения, затем возвращает NeuralNetwork *), и я также могу редактировать и читать данные nn (как отображается printf), которые назначены из возвращения NeuralNetwork ().

Проблемы возникают только тогда, когда я передаю их функциям.

1 Ответ

0 голосов
/ 28 августа 2018

Что вы делаете с этой строкой:

Test(&nn);

- это вызов Test (который принимает указатель на struct NeuralNetwork) с указателем на указатель на struct NeuralNetwork. Обычно компилятор выдаст ошибку / предупреждение, которое будет выглядеть примерно так:

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

Таким образом, вы получаете доступ к тому, чего не должны делать в функции Test.

Просто позвоните Test так:

Test(nn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...