我已经开始在 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;
}
我似乎无法掌握这一点,我可能会遗漏一些明显的东西,或者问题比这更大......无论哪种方式,我们都会感谢您的帮助!
最佳答案
在 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/