2016-11-20 14 views
-2

は、私は、配列やポインタを使用して、スタックの実装のためのC言語で作られたプログラムです。ERRORのmalloc()を使用してはsizeof()関数

#include<stdio.h> 
#include<stdlib.h> 
struct ArrayStack { 
    int top; 
    int capacity; 
    int *array; 
}; 
struct ArrayStack *createStack(int cap) { 
    struct ArrayStack *stack; 
    stack = malloc(sizeof(struct Arraystack)); 
    stack->capacity = cap; 
    stack->top = -1; 
    stack->array(malloc(sizeof(int) * stack->capacity)); 
    return stack; 
} 
int isFull(struct ArrayStack *stack) { 
    if(stack->top == stack->capacity-1) 
    return 1; 
    else 
    return 0; 
} 
int isEmpty(struct ArrayStack *stack) { 
    if(stack->top == -1) 
    return 1; 
    else 
    return 0; 
} 
void push(struct ArrayStack *stack, int item) { 
    if(!isFull(stack)) { 
    stack->top++; 
    stack->array[stack->top] = item; 
    } else { 
    printf("No more memory available!"); 
    } 
} 
void pop(struct ArrayStack *stack) { 
    int item; 
    if(!isEmpty(stack)) { 
    item = stack->array[stack->top]; 
    stack->top--; 
    } else { 
    printf("Memory is already empty!"); 
    } 
} 
int main() { 
    struct ArrayStack *stack; 
    stack = createStack(10); 
    int choise; 
    int item; 
    while(1) { 
    system("clear"); 
    printf("\n1. Push"); 
    printf("\n2. Pop"); 
    printf("\n3. Exit"); 
    printf("\n\n\n\t\tPlease choose your option!"); 
    scanf("%d",&choise); 
    switch(choise) { 
    case 1: 
     printf("\nEnter a number"); 
     scanf("%d",&item); 
     push(stack,item); 
     break; 
    case 2: 
     pop(stack); 
     break; 
    case 3: 
     exit(0); 
     break; 
    default : 
     printf("\nPlease enter a valid choise!"); 
     break; 
    } 
    } 

} 

私はこのコードをコンパイルしようとするときは、次のエラーが来ています

prog.c:10:25: error: invalid application of 'sizeof' to incomplete type 'struct Arraystack' 
    stack = malloc(sizeof(struct Arraystack)); 
         ^
prog.c:13:3: error: called object is not a function or function pointer 
    stack->array(malloc(sizeof(int) * stack->capacity)); 
^

私はideoneとcodechefのideのようなオンラインIDEを使用しましたが、同じエラーが再び発生しています。私は完全に打たれました、これは本当に迷惑です!

+2

'sizeof(struct ArrayStack) '大文字の' S'打ち切りとして誤って投票されました – Danh

答えて

1

まず、あなたのエラー:

stack = malloc(sizeof(struct ArrayStack)); 

あなたはArraystack(小文字s)を入力しました。

stack->array=malloc(sizeof(int) * stack->capacity); 

あなたは文法的にコンパイラを約array関数ポインタでないと不平を言う理由である関数呼び出しであるstack->array(malloc(sizeof(int) * stack->capacity));を入力しました。また

  1. createStack()malloc()編スペースfree()に機能void destroyStack(ArrayStack* stack)を紹介します。スタックを終了したらmain()の最後に向かって呼び出します。

free()には常にmalloc()がレンダリングされます。

  1. pop()はポップされた値を返しません。
  2. push()pop()が失敗した場合は、おそらく失敗を示す値を返すべきです。
関連する問題