我正在尝试将带有选项卡的字符串传递给函数,并让函数替换每个选项卡,或者用空格重复选项卡。我遇到的问题是关于内存问题。这是我的代码:
void ConvertToOneSpace(char *dst, char *src) {
int i, j, first_tab = 1;
for(i = 0, j = 0; src[i] != '\0'; i++) {
if (src[i] == '\t' && first_tab == 0) continue;
if (src[i] == '\t' && first_tab == 1) {
first_tab = 0;
dst[j] = ' ';
} else {
first_tab = 1;
dst[j] = src[j];
}
j++;
}
dst[j] = '\0';
}
int PrintComment(char *desc) {
char aString[4096];
char *result = NULL;
strcpy(aString, desc);
result = strtok(aString, "\n");
while(result != NULL) {
result_notabs = (char *)malloc(sizeof(char) * strlen(result)));
ConvertToOneSpace(result_notabs, result);
printf("%s\n", result_notabs);
/* Code that operates on result_notabs, splitting it into multiple sub
strings of shorter length. This code was tested working perfectly
before implementing and utilizing ConvertToOneSpace */
free(result_notabs);
}
return 0;
}
我在多个字符串(数百个)上运行 PrintComment(),并使用随机打印语句来验证一切是否正常工作。它确实如此,直到看起来是一个随机字符串(我可以告诉它没什么特别的)并且我收到以下错误:
free(): invalid next size (fast)
我假设它与内存有关,因为当我对它进行 valgrind(使用 memcheck)时,它工作得很好。任何人都可以发现错误吗?我假设它不在我遗漏的其他代码中(正如评论所说,在实现它之前它工作得很好)。
谢谢!