尝试设置数组索引设置结构值

时间:2016-06-27 09:12:58

标签: c

当我尝试设置vec->data[vec->volume] = val而不是在vec-volume中设置vec->data的索引时,只需将vec->volume设置为val。我真的不明白为什么会发生这种情况,我对C仍然很陌生。任何帮助都将受到赞赏:)

下载完整的代码

#include <stdio.h>
#include <stdlib.h>

#include "vector.h"

vector *vector_new(void) {
    vector *vec = (vector *)malloc(sizeof(vector));
    if (vec == NULL) {
        fprintf(stderr, "Could not allocate memory for vector.\n");
        exit(1);
    }

    vec->volume = (unsigned int)0;
    vec->size = (unsigned int)1;
    return vec;
}

int vector_peek(vector *vec, unsigned int idx) {
    if (idx < vec->size)
        return vec->data[idx];
    fprintf(stderr, "Array out of bounds.\n");
    exit(1);
}

void vector_push(vector *vec, int val) {
    if (vec->volume + 1 >= vec->size)
        vector_grow(vec);
    vec->volume += 1;
    vec->data[vec->volume] = val; //THIS IS WHERE THE ISSUE IS
}

void vector_pop(vector *vec) {
    if (vec->size - 1 <= vec->size / 2)
        vector_shrink(vec);
    vec->volume -= 1;
}

void vector_grow(vector *vec) {
    vec->data = (int *)realloc(&vec->data, vec->size * 2 * 4);
    vec->size *= 2;
    if (vec->data == NULL) {
        fprintf(stderr, "Could not grow vector.\n");
        exit(1);
    }
}

void vector_shrink(vector *vec) {
    vec->data = (int *)realloc(&vec->data, vec->size / 2 * 4);
    vec->size /= 2;
    if (vec->data == NULL) {
        fprintf(stderr, "Could not grow vector.\n");
        exit(1);
    }
}

void vector_print(vector *vec) {
    printf("Size: %i, volume: %i, Elements:", vec->size, vec->volume);
    /*for (int i; i < vec->volume; i++)
        printf(" %i", vec->data[i]);*/
    printf("\n");
}

int main(void) {
    vector *newvec = vector_new();
    vector_print(newvec);
    vector_push(newvec, 12);
    vector_print(newvec);

    return 0;
}

这是标题

#ifndef VECTOR_H__
#define VECTOR_H__

typedef struct vec {
    int *data;
    unsigned int volume;
    unsigned int size;
} vector;

vector *vector_new(void);
int vector_peek(vector *vec, unsigned int idx);
void vector_push(vector *vec, int val);
void vector_pop(vector *vec);
void vector_grow(vector *vec);
void vector_shrink(vector *vec);
void vector_print(vector *vec);

#endif

0 个答案:

没有答案