当我在以下(示例)代码上运行 valgrind 时,它会报告“Invalid free() / delete / delete[]”和 Invalids 读取。我真的不明白为什么。有人可以解释一下吗?
编辑:感谢您的回复,现在很明显。
#include <stdio.h>
#include <stdlib.h>
#include <string.h
void vl_dec(char* a) {
char* str = a;
while (*(str+1) != '\0') str++;
while(*str == '0') {
*str = '9';
str--;
}
(*str)--;
if (*a == '0') {
memmove(a, a+1, strlen(a));
a = (char*)realloc(a, (strlen(a)+1)*sizeof(char));
if (a == NULL) {
fprintf(stderr, "Cannot allocate memory\n");
exit(1);
}
}
}
int main(int argc, char* argv[]) {
char* a = (char*)malloc(6*sizeof(char));
if (a == NULL) {
fprintf(stderr, "Cannot allocate memory\n");
exit(1);
}
strcpy(a, "10000");
vl_dec(a);
printf("%s\n", a);
free(a);
return 0;
}