C realloc(动态数组) - 访问冲突

时间:2016-02-01 22:53:30

标签: c dynamic visual-studio-2015 access-violation

从C中的动态数组开始。我在insertArray函数中(在realloc行中或在尝试将元素(char)存储在数组中时)获得访问冲突。

似乎无法解决它或深究它。感谢

代码:

#include <stdio.h>

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

Array elements;

void initArray(Array *a, size_t initialSize) {
    a->array = (char *)malloc(initialSize * sizeof(char));
    a->used = 0;
    a->size = initialSize;
}

void insertArray(Array *a, char element) {
    if (a->used == a->size) {
        a->size *= 2;
        a->array = (char *)realloc(a->array, a->size * sizeof(char));
    }
    a->array[a->used++] = element;
}

void popArray(Array *a) {
    a->used--;
}

void freeArray(Array *a) {
    free(a->array);
    a->array = NULL;
    a->used = a->size = 0;
}

char vars[15];

int main() {
    initArray(&elements, 2);
    printf("Enter 15 character String: ");
    scanf_s("%s", vars, 15);
    for (int i = 0; i < 15; i++) {
        insertArray(&elements, vars[i]);
    }
    freeArray(&elements);
}

1 个答案:

答案 0 :(得分:1)

我怀疑问题是由丢失的#include <stdlib.h>引起的。

请参阅Do I cast the result of malloc?,了解为什么不应该转换malloc的返回值。