1
我很新的C(它實際上是我與指針的第一項任務),我不能想出這個錯誤...「堆損壞檢測」採用免費的,當()
這裏是我的代碼:
void str_rv(char c[]) {
int i, len = str_ln(c);
char *rev = (char*)calloc(len, sizeof(char));
check_mem(rev);
for (i = 0; i < len; ++i) {
rev[i] = c[len - (i + 1)];
}
rev[len] = '\0';
str_cpy(rev, c);
printf("Current string is ");
str_print(c);
putchar('\n');
free(rev);
}
在這個函數中,我試圖從sacnf()
反轉一個字符串。 當我調試它,它運行良好,直到我使用free()
的最後一行。我在網上看了一下,我確信這是我嘗試使用這個內存的唯一地方。
幫助?
你正在寫入超出你分配的範圍(你爲'len'字符分配內存,所以最後可訪問的索引是rev [len-1]',因爲rev從0開始)。 – ccKep
使用calloc(len + 1,sizeof(char)) – imreal