gcc (GCC) 4.7.2
c89
你好後,釋放內存已遞增指針
All error checking removed from snippet - to keep the code short.
我釋放,我已經分配並複製一個字符串到一些內存的問題。
我的程序將檢查數字並增加指針,直到它變爲非數字。
當我去釋放內存時,我得到一個無效的自由堆棧轉儲。
我認爲這是因爲我增加了指針,現在它指向字符串的一半,因爲這是非數字開始。 如果我不增加它的自由空間。但是,如果我增加它然後嘗試並釋放,我會得到堆棧轉儲。
int parse_input(const char *input)
{
char *cpy_input = calloc(strlen(input) + 1, sizeof(char));
size_t i = 0;
apr_cpystrn(cpy_input, input, strlen(input) + 1);
/* Are we looking for a range of channels */
for(i = 0; i < strlen(cpy_input); i++) {
if(isdigit(*cpy_input)) {
/* Do something here */
cpy_input++;
}
}
/* Where finished free the memory */
free(cpy_input); /* Crash here */
return 0;
}
我通過聲明另一個指針和分配的地址解決了這個問題,所以它指向的第一個字符,然後我釋放該。它工作正常,即
char *mem_input = cpy_input;
free(mem_input);
我的問題是爲什麼我需要聲明另一個指針能夠釋放內存?有沒有另外一種方法呢?
提前許多感謝,
你可以使用另一個變量來處理分配的內存,在那裏宣佈'cpy_input'爲'char * const的cpy_input',重要的是你是你'免費(same_address);'你的malloc'調用了()' –
你只能提供'free()'以前由'malloc()','calloc()'或'realloc()'返回的指針。將指針返回分配的空間是不夠的;它必須完全是返回的值。 –