2014-09-02 3 views
-1
int main() 
{ 
    char ans = YES; 
    Stack card; 
    int arr[CARD_PER_DECK]; 
    int catchVar;//to hode values popped off the stack                   
    int size = 0; 
    // put shuffled cards into the stack                      
    inOrder(arr, CARD_PER_DECK, CARD_NUM_RANGE); 
    randomize(arr, CARD_PER_DECK); 
    // print(arr, CARD_PER_DECK, card);                      
    for (int i = 0; i < CARD_PER_DECK; i++){ 
    card.push(arr[i]); 
    cout << arr[i] << " "; 
    } 
    cout << endl; 
    //testing popping                           
    for (int i = 0; i < CARD_PER_DECK; i++){ 
    card.pop(arr[i]); 
    cout << arr[i] << " "; 
    } 
    cout << endl; 
    return 0; 
} 
void swap(int *a, int*b) 
{ 
    int temp = *a; 
    *a = *b; 
    *b = temp; 
} 
void randomize(int arr[], int n) 
{ 
    srand(time(NULL)); 
    for (int i = n-1; i>0; i--){ 
    int j = rand()%(i+1); 
    swap(&arr[i], &arr[j]); 
    } 
} 
void print(int arr[], int n, Stack card) 
{ 
    for (int i = 0; i < CARD_PER_DECK; i++){ 
    card.push(arr[i]); 
    cout << arr[i] << " " ; 
    } 
    cout << endl ; 
} 


//stack.cpp 
Stack::Stack() 
{//Sets stack to initial empty state                       
    capacity = 1; 
    stackSize = 0; 
    stackArray = new int[stackSize]; 
    top = -1; 
} 
void Stack::push(int num) 
{ 
    if (stackSize > capacity){ 
    resize(capacity*2); 
    } 
    top++; 
    stackArray[top] = num; 
    stackSize++; 
} 
void Stack::resize(int newCap) 
{ 
    int* resizeArray = new int[newCap]; 
    for (int i = 0; i < stackSize; i++) 
    resizeArray[i] = stackArray[i]; 
    capacity = newCap; 
    delete[] stackArray; 
    stackArray = resizeArray; 
} 

Я попытался помещать рандомизированное число в стек и выталкивать их. он может скомпилироваться, но когда я запустил его, я получил эту ошибку: завершение вызова после вызова экземпляра «std :: bad_alloc'what(): std :: bad_alloc Я новичок в этом, может кто-нибудь сказать мне, как его исправить ?stack and queue странная ошибка

Благодаря

+1

В качестве примечания: Call 'srand (время (NULL));' только один раз в функции 'main()'. Также обратите внимание: для этого вы можете использовать ['std :: random_shuffle()'] (http://en.cppreference.com/w/cpp/algorithm/random_shuffle). –

+0

@ πάνταῥεῖ: как это исправить? – user3923936

+0

Плохой адрес - это когда распределение памяти идет не так. Вероятно, это ваш класс 'Stack', который вы не указали. Также минимизируйте свой пример для затронутого кода. Предоставьте соответствующее сообщение об ошибке. –

ответ

1

Вы должны исправить push() функцию, чтобы вырастить массив, используя фиксированное число элементов следующим образом:

void Stack::push(int num) { 
    static const int grow = 10; // Grow the array for 10 elements a time 
    if (stackSize > capacity){ 
     resize(capacity + grow); 
    } 
    top++; 
    stackArray[top] = num; 
    stackSize++; 
} 
+0

Спасибо! я думаю, что работает – user3923936