为什么我的c字符串堆栈有valgrind-3.1.1报告的无效写入

为什么我的c字符串堆栈有valgrind-3.1.1报告的无效写入,c,C,valgrind报告大小为8的无效写入 在0x4007A0处:ArrayCstringPush 通过0x4008F8:主 地址0x4A0A450是分配大小为8的块后的0字节 在0x4905D27:calloc 通过0x……:ArrayCstringNew 作者:main 为什么要报告此错误?以及如何解决这个问题。 谢谢 代码中存在多次错误使用malloc和calloc的情况,这可能是导致写入无效的原因 更改: ep =(ArrayCstring *)malloc(1000); s->el

valgrind报告大小为8的无效写入

在0x4007A0处:ArrayCstringPush

通过0x4008F8:主

地址0x4A0A450是分配大小为8的块后的0字节

在0x4905D27:calloc

通过0x……:ArrayCstringNew

作者:main

为什么要报告此错误?以及如何解决这个问题。 谢谢


代码中存在多次错误使用malloc和calloc的情况,这可能是导致写入无效的原因

更改:

ep =(ArrayCstring *)malloc(1000);

s->elems=(char **)calloc(s->allocSize,sizeof(int));

(s->elems)[s->numOfElems]=(char *)calloc(lengthOfElem,sizeof(int));
致:


分别。

而不是像

ep = (ArrayCstring *) malloc (1000);
您必须注意分配的大小是ArrayCstring的倍数,否则在访问最后一个元素时,您可能会写入超出分配内存的内容

我建议

ep = (ArrayCstring *) malloc (1000 * sizeof (ArrayCstring));

这能解决valgrind的报告吗对malloc的调用是在includeto awoodland:arrayOfCstring.h之后的include。c中不需要强制转换。这里的问题不是强制转换。
ep = (ArrayCstring *) malloc (1000);
ep = (ArrayCstring *) malloc (1000 * sizeof (ArrayCstring));