c - C 中的动态数组 - 抛出异常

标签 c exception dynamic-arrays

我已经开始在 C 中使用动态数组,我收到抛出异常的运行时错误:

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

当我尝试将 char 元素存储在 struct Array 中找到的数组变量中时,这发生在 insertArray() 函数中>(见下文):

代码:

#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;
}

我似乎无法掌握这一点,我可能会遗漏一些明显的东西,或者问题比这更大......无论哪种方式,我们都会感谢您的帮助!

最佳答案

  1. 在 initArray 中:[ int allocate: ( int *) ... ]

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

    在 insertArray 中:[ char 分配:( char *) ... ]

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

这会导致问题。

  • 使用 gdb:GNU 调试器
  • 关于c - C 中的动态数组 - 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530909/

    相关文章:

    c - 返回主函数指针时数据被重置 c/linux

    c# - 我怎样才能抛出带有特定 HResult 的异常?

    java - 性能和 hibernate

    java - 能够编译但无法使用 jar 文件从 cmd 运行 Java

    c++ - 为什么使用动态数组而不是常规数组?

    c - 需要知道如何在 c 中按空格解析单词。还需要知道我是否正确分配内存?

    c - 如何将文件中的数据读取到二维数组中?

    c - “ Hello World ”视频程序不工作

    c 8个硬币组合代码

    delphi - 如何非常快速地生成具有不同 "branch"长度的二维数组