为什么我的c字符串堆栈有valgrind-3.1.1报告的无效写入
valgrind报告大小为8的无效写入 在0x4007A0处:ArrayCstringPush 通过0x4008F8:主 地址0x4A0A450是分配大小为8的块后的0字节 在0x4905D27:calloc 通过0x……:ArrayCstringNew 作者:main 为什么要报告此错误?以及如何解决这个问题。 谢谢为什么我的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
代码中存在多次错误使用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));