Я работаю с VS2012, в проекте, который сочетает код C и C++. Эта проблема не возникает при запуске кода в GCC.C Странный переполнение стека при вызове другой функции
(Смотрите скриншот внизу)
В приведенной ниже C функция не будет работать на переполнение стека, немедленно, когда функция вызывается FeedForwardNetwork_new_from_string()
. Отладчик прерывается после вызова этой функции, но до того, как выполняется какой-либо код этой функции.
FeedForwardNetwork *FeedForwardNetwork_new_from_file(const char *filePath) {
char *file_contents;
long input_file_size;
FILE *input_file = fopen(filePath, "rb");
FeedForwardNetwork *ffn;
if (input_file == NULL) {
return NULL;
}
fseek(input_file, 0, SEEK_END);
input_file_size = ftell(input_file);
rewind(input_file);
file_contents = (char*)malloc((input_file_size + 1) * (sizeof(char)));
fread(file_contents, sizeof(char), input_file_size, input_file);
file_contents[input_file_size] = '\0';
fclose(input_file);
ffn = FeedForwardNetwork_new_from_string(file_contents);
free(file_contents);
return ffn;
}
Это поток к функции, начиная с main()
:
int main(int argc, char **argv) {
VideoAnalyzerUtils::getNeuralNetwork();
return 0;
}
Функция getNeuralNetwork()
, которая вызывает проблематичный функцию:
FeedForwardNetwork *VideoAnalyzerUtils::getNeuralNetwork() {
if (VideoAnalyzerUtils::network_ == NULL) {
VideoAnalyzerUtils::network_ = FeedForwardNetwork_new_from_file("net.txt");
}
return VideoAnalyzerUtils::network_;
}
Осуществление от FeedForwardNetworkSettings_new_from_string()
:
FeedForwardNetworkSettings *FeedForwardNetworkSettings_new_from_string(const char *settingsStr) {
char buffer[NEURON_STR_READ_BUFFER_SIZE];
int withBias;
double trainingRate ;
double outputLayerTrainingRate;
int hiddenLayerType;
int outputLayerType;
FeedForwardNetworkSettings *settings;
_Neuron_getValueFromString(settingsStr, "withBias=", buffer);
if (strcmp(buffer, "") == 0) {
return NULL;
}
withBias = atoi(buffer);
_Neuron_getValueFromString(settingsStr, "trainingRate=", buffer);
if (strcmp(buffer, "") == 0) {
return NULL;
}
trainingRate = atof(buffer);
_Neuron_getValueFromString(settingsStr, "outputLayerTrainingRate=", buffer);
if (strcmp(buffer, "") == 0) {
return NULL;
}
outputLayerTrainingRate = atof(buffer);
_Neuron_getValueFromString(settingsStr, "hiddenLayerType=", buffer);
if (strcmp(buffer, "") == 0) {
return NULL;
}
hiddenLayerType = atoi(buffer);
_Neuron_getValueFromString(settingsStr, "outputLayerType=", buffer);
if (strcmp(buffer, "") == 0) {
return NULL;
}
outputLayerType = atoi(buffer);
settings = (FeedForwardNetworkSettings*)malloc(sizeof(FeedForwardNetworkSettings));
settings->withBias_ = withBias;
settings->trainingRate_ = trainingRate;
settings->outputLayerTrainingRate_ = outputLayerTrainingRate;
settings->hiddenLayerType_ = (NeuronActivationFunction)hiddenLayerType;
settings->outputLayerType_ = (NeuronActivationFunction)outputLayerType;
return settings;
}
Не могли бы вы помочь мне понять, почему это произойдет и как это исправить?
Скриншот ошибки (пожалуйста, используйте зум-в браузере, чтобы увидеть его лучше):
Screenshot http://s23.postimg.org/fvtetkjgq/c_error.jpg
Вы, наверное, дует свой стек - единственный способ угадать бы увидеть код вызываемой функции, а не вызывающий. – Mat
Не размещайте изображения. Сообщение! – Olaf
У вас есть большой локальный массив где-то еще? Возможно ли создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и показать нам? –