다른 함수에서의 malloc()에 의해 할당 무료() 값 :수 없습니다 나는이 같은 뭔가 C 기능이
void foo(char ** out) {
*out = malloc(computedsize);
if(*out != NULL){
sprintf(*out, "%s,%s", foovar, baa);
}
}
하고 내가 전화 : 내가 전화
int main(void) {
char * out = NULL;
foo(&out);
printf("%s\n", out); /* so far, it works fine */
free(out); /* the problem. */
}
:
free(out);
는 주어진 :
*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09a03050 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b161)[0x4ff161]
/lib/tls/i686/cmov/libc.so.6(+0x6c9b8)[0x5009b8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x503a9d]
./a.out[0x804875b]
./a.out[0x804871a]
./a.out[0x80486f9]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x4aabd6]
./a.out[0x8048601]
======= Memory map: ========
// 복사 메모리 맵 부분이 필요합니까?
누군가 내 실수를 지적 할 수 있습니까? 나는 그것이 sprintf()
라고 생각한다. .. 또는 실제로, 나는 전혀 모른다. 나는 그것에 대한 함수 할당 값 내에서 새로운 변수를 만들려고했다. 그리고 *out = myvariable;
과 *out = strdup(myvariable)
을 호출했지만 free()
호출은 같은 오류를 준다. 어떤 도움이라도 대단히 감사합니다. 미리 감사드립니다.
UPDATE :
나는 문제가 함수 내에서입니다 것을 알 수있다. free()
을 호출하면 잘못된 다음 크기가됩니다. 예를 들어
:
char *f=malloc(2);
strcpy(f,"a");
free(f);
foo()
내부 기능은 main()
기능을 정상적으로 작동 위의 오류를 가져옵니다. 이 문제를 해결하는 방법을 완전히 잃어 버렸습니다.
함수를 문자열로 인쇄하려고합니까? 그게 정확히 어떻게 작동할까요? – FatalError
computedsize가 너무 작아서 할당 된 공간의 끝을 지나쳐 덮어 쓰고 있습니다. –
sprintf보다 안전한 [snprintf] (http://linux.die.net/man/3/snprintf)를 사용해보십시오. – Mahesh