为结构数组分配空间,Valgrind无效读取

时间:2015-04-08 09:59:33

标签: c arrays malloc valgrind realloc

我有一个动态分配的结构数组。我正在编写一个向该数组添加新结构条目的函数。每次调用函数时 - 应重新分配数组的空间。

pa->arr = realloc(pa->arr, (pa->count + 1) * sizeof(struct product));
if (pa->arr == NULL)
    return NULL;

结构数组 arr 由另一个结构 struct product_array * pa 维护,除了指向数组的指针 * arr 包含< strong> count (数组条目数)。

struct product_array {
    struct product *arr;
    unsigned int count;
};

struct product {
    char *title;  
};

另外,我必须分别为标题字段分配空间。

char *temp = malloc(strlen(title) + 1);
    if (temp == NULL){
        return NULL;
    }

    strcpy(temp, title);
        title = temp;

    pa->arr[pa->count].title = title;

该功能有效,但我得到Valgrid抱怨“无效读取大小8”。如果你能帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:0)

您收到的错误表明您正在读取未分配的内存。

也许你错过了这个: pa->arr[pa->count - 1].title = title;不是pa->arr[pa->count].title = title;

**我想将此作为评论发布,但仍然没有足够的声誉!