在另一个.c文件中使用函数内部的函数?

时间:2014-02-09 16:47:57

标签: c arrays

我正在尝试从另一个函数更改数组的大小。代码编译但程序崩溃......我被卡住了,非常困难。新的,我的头向左旋转aaaaah ........

array.c

struct array {
    int* data;
    int size;
};

struct array* array_create()
{
    struct array* array = (struct array*) malloc(sizeof(struct array));
    array->data = (int*) malloc(sizeof(int) * 10000);
    array->size = 10000;
    return array;
}

void array_resize(struct array* array, int size)
{
    if (size > array->size) {
        free(array);
        array->data = (int*) malloc(sizeof(int) * size);
    }

    array->size = size;
}

int array_size(struct array* array)
{
    return array->size;
}

array.h

typedef struct array* ARRAY;

ARRAY array_create();
void array_resize(struct array* array, int size);

edit.c

void edit()
{
    array_resize(array, 100); // I can run the code but program crashes
}

的main.c

ARRAY array;
array = array_create();
edit();                       // Program crashes

2 个答案:

答案 0 :(得分:1)

    free(array);
    array->data = (int*) malloc(sizeof(int) * size);

在这里,您可以免费array,并在下一行取消引用它。这是未定义的行为。但似乎是导致事故发生的原因。

答案 1 :(得分:1)

此:

void array_resize(struct array* array, int size)
{
    if (size > array->size) {
        free(array);
        array->data = (int*) malloc(sizeof(int) * size);
    }

    array->size = size;
}

free(array->data)不是free(array)。或者更好realloc array->data

此外,除非您在寻找麻烦,否则请在.h文件中声明您的功能,就像在.c文件中一样,即:

struct array;
struct array *array_create();

并在array.h中加入array.c