c-为什么malloc初始化的指针是null指针



我很确定这是一个简单的错误,但我还是找不到。有人能发现错误吗?我对阵列CCD_ 1和CCD_。但在函数结束后,我尝试使用momentumVelocity,它就是一个空指针。另一侧的CCD_ 4被初始化。

randomizeNeuron(...)函数只更改值,在该函数中也存在monumentumVelocity`。

typedef struct{
    double output;
    int numWeights;
    double* weights;
    double* momentumVelocity;
    double wBias;
    double error;
    double inputSum;
}NeuronTanh;
typedef struct{
    int numNeurons;
    NeuronTanh* neurons;
}Layer;
typedef struct{
    int numLayers;
    Layer* layers;
    double prevError;
    double currentError;
    double currentLearningRate;
}Network;

void initializeNetwork(Network* network){
    //malloc stuff
    network->numLayers = NUMBER_LAYERS;
    network->layers = malloc(NUMBER_LAYERS * sizeof(Layer));
    network->layers[0].numNeurons = SIZE_INPUT_LAYER;
    network->layers[1].numNeurons = SIZE_HIDDEN_LAYER1;
    network->layers[2].numNeurons = SIZE_HIDDEN_LAYER2;
    network->layers[3].numNeurons = SIZE_OUTPUT_LAYER;
    for(int currentLayerIndex=0; currentLayerIndex<network->numLayers;++currentLayerIndex){
        Layer *l = &network->layers[currentLayerIndex];
        l->neurons = malloc(l->numNeurons * sizeof(NeuronTanh));
        for(int j=0; j<l->numNeurons; ++j){
            if(currentLayerIndex==0){
                l->neurons[j].numWeights = SIZE_INPUT;
            }else{
                l->neurons[j].numWeights = network->layers[currentLayerIndex-1].numNeurons;
            }
            l->neurons[j].weights = malloc((l->neurons[j].numWeights) * sizeof(double));
            l->neurons[j].momentumVelocity = malloc((l->neurons[j].numWeights) * sizeof(double));
            randomizeNeuron(&(l->neurons[j]), getmaxInitValue(network, currentLayerIndex));
        }
    }
    network->currentError = 0;
    network->currentLearningRate = LEARNING_RATE;
    network->prevError = 0;
}

如果没有其他隐藏问题,那么在对malloc:的两次调用中使用相同的计算

(l->神经元[j].numWeights)*大小(双)

那么malloc失败并返回一个空指针。换句话说,您没有足够的连续可用内存来执行分配。我不知道(l->neurons[j].numWeights)的值:如果这是一个巨大的数字,而你没有很多RAM,那么这可能就是问题所在。

尝试交换对malloc的两个调用,看看第二个调用是否失败。这会告诉你很多。

相关内容

  • 没有找到相关文章

最新更新