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);
私の質問は、メモリを解放できるようにするために別のポインターを宣言する必要があるのはなぜですか? これを行う別の方法はありますか?
よろしくお願いします。