2015-03-01 1 views
0

Прикосновение к C после долгого времени. Я получаю ошибку времени выполнения в следующем коде. IDE [C-Free], который я использую, не показывает точную ошибку, но показывает «StackMin.exe» перестает работать.получение ошибки во время выполнения программы C

Здесь я использую две структуры, struct stack для стека и struct AdvanedStack предназначен для хранения двух стеков. В конце концов, я хочу, чтобы напечатать емкость обоих стеков, которые в Кодексе AdvancedStack

является:

#include<stdio.h> 

struct stack { 
    int capacity; 
    int top; 
    int *array; 
    }; 

struct AdvancedStack{ 

    struct stack* elementStack; 
    struct stack* minStack; 

}; 


struct stack* createStack() 
{ 
    struct stack* myStack= (struct stack*)malloc(sizeof(struct stack)); 
    myStack->capacity=5; 
    myStack->top=-1; 
    myStack->array= malloc(myStack->capacity * sizeof(int)); 

    return myStack; 

} 

struct AdvancedStack* createAdvancedStack() 
{ 
    struct AdvancedStack *myStack = (struct AdvancedStack*)malloc(sizeof(struct AdvancedStack)); 
    myStack->elementStack=createStack(); 
    myStack->minStack=createStack(); 
} 

int main() 
{ 
    struct AdvancedStack* advStack = createAdvancedStack(); 

    printf("%d",advStack->elementStack->capacity); 
    printf("%d",advStack->minStack->capacity); 
} 

ответ

3

Вы забыли вернуть myStack из функции createAdvancedStack().

struct AdvancedStack* createAdvancedStack() 
{ 
    struct AdvancedStack *myStack = malloc(sizeof(struct AdvancedStack)); //Don't cast the result of malloc 

    myStack->elementStack=createStack(); 
    myStack->minStack=createStack(); 

    return myStack; //You forgot this 
} 

Read this знать, почему вы не должны отбрасывать результат из malloc.

+0

Работа с оператором 'return'. Спасибо за это. Но есть ли какая-то конкретная причина, почему бы не использовать результат «malloc» здесь. Разве это имеет значение? –

+0

Кроме того, main должен вернуть значение или вызвать exit(). –

+0

Прочтите ссылку, есть несколько причин. –