用C如何解决“mremap块断言错误”

时间:2019-02-01 01:28:29

标签: c

我目前正在学习C,并且正在尝试扩展可用于结构数组的内存量。当我尝试增加数组时,在运行时收到以下错误

malloc.c:2852: mremap_chunk: Assertion `((size + offset) & (GLRO (dl_pagesize) - 1)) == 0' failed. Aborted.

下面是造成问题的原因的代码。

我尝试阅读realloc手册页和在线教程,但是找不到解决此特定情况的任何东西。

typedef struct _hash{
        int times;
        char word[250];
        struct _hash *n;
}Hash;

int main(){
        Hash* temp;
        int currentMax=10;
        Hash* ptr[currentMax];
        for(int i=0; i<10;i++){
                ptr[i]=malloc(sizeof(ptr));
                strcpy(ptr[i]->word, "hello world");
                ptr[i]->times=1;
                ptr[i]->n=NULL;
        }
        temp=realloc(ptr, 3*sizeof(Hash));
}

我希望数组可以扩展为三个大小,以便以后可以添加其他元素,但是我会不断遇到相同的错误。

1 个答案:

答案 0 :(得分:1)

ptr[i]=malloc(sizeof(ptr));

您在此处分配了错误的大小。应该是

ptr[i]=malloc(sizeof(*ptr[i]));

ptr[i]=malloc(sizeof(Hash));

因此,您随后将超出缓冲区并调用未定义的行为。

您应该考虑使用-g编译程序(以启用调试符号),并在valgrind下运行它。这样的错误将被立即识别。