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);
我的问题是为什么我需要声明另一个指针才能释放内存?还有另一种方法吗?
提前谢谢了,