2015-12-30 34 views
0

我已經開始使用的動態數組在C,我得到一個異常拋出運行時錯誤:動態數組 - 拋出異常

Exception thrown at 0x00007FF7ECB21A87 in Assignment 3.exe: 0xC0000005: Access violation writing location 0xFFFFFFFFE7CBC420.

這發生在insertArray()功能,權當我嘗試存儲在struct Array發現數組變量char元件(見下面):

代碼:

#include <stdio.h> 
#include "header3.h" 

typedef struct { 
    char *array; 
    size_t used; 
    size_t size; 
} Array; 

typedef struct { 
    int *array; 
    size_t used; 
    size_t size; 
} intArray; 

void initArray(int option, Array *a, intArray *b, size_t initialSize) { 
    if (option == 1) { 
     a->array = (int *)malloc(initialSize * sizeof(char)); 
     a->used = 0; 
     a->size = initialSize; 
    } 
    else { 
     b->array = (int *)malloc(initialSize * sizeof(int)); 
     b->used = 0; 
     b->size = initialSize; 
    } 
} 

void freeArray(int option, Array *a, intArray *b) { 
    if (option == 1) { 
     free(a->array); 
     a->array = NULL; 
     a->used = a->size = 0; 
    } 
    else { 
     free(b->array); 
     b->array = NULL; 
     b->used = b->size = 0; 
    } 
} 

void insertArray(int option, Array *a, intArray *b, char element, int element2) { 
    if (option == 1) { 
     if (a->used == a->size) { 
      a->size *= 2; 
      a->array = (char *)realloc(a->array, a->size * sizeof(char)); 
     } 
     a->array[a->used++] = element; //ERROR HERE 
    } 
    else { 
     if (b->used == b->size) { 
      b->size *= 2; 
      b->array = (int *)realloc(b->array, b->size * sizeof(int)); 
     } 
     b->array[b->used++] = element2; 
    } 
} 


int main() { 
    Array eq, postFx; 
    initArray(1, &eq, 0, 2); // initially 2 elements 
    initArray(1, &postFx, 0, 2); 
    int i; 
    char C; 
    printf("Enter character string\n"); 
    while ((C = getchar()) != EOF) 
     insertArray(1, &eq, 0, C, 0); // automatically resizes as necessary 
    //int n = expEvaluate(eq, (eq.used)-1, postFx); //call expEvaluate to process eq 
    //printf("\nAnswer: %d", n); 
    int chk = getchar(); //readkey (twice) 
    freeArray(1, &eq, 0); 
    chk = getchar(); 

    return 0; 
} 

我似乎無法GE不管怎樣,我可能會錯過某些明顯的東西,或者問題比這更大......無論哪種方式,都可以幫助我們表示感謝!

+1

使用'gdb' ....... –

+1

花一些時間學習如何使用調試器。 – OldProgrammer

+1

以及我知道如何使用調試器,感謝調試器,我確切地知道拋出異常的地方,但不幸的是我不知道代碼 – Logan

回答

0
  1. 在initArray:[INT分配:爲(int *)...]

    a->array = (int *)malloc(initialSize * sizeof(char)); 
    

    在insertArray:[炭分配:(字符*)...]

    a->array = (char *)realloc(a->array, a->size * sizeof(char)); 
    

它引起問題。

  • 用GDB:GNU調試