참고 : "C++? use std :: string!"에 대한 설명을 숨기십시오.. 이 질문은 C 문자열을 사용하지만 일반적으로 문자열보다 메모리 관리에 관한 것입니다.여기서 malloc 된 포인터를 반환하면 "HEAP CORRUPTION"이 무료로 제공되는 이유는 무엇입니까?
나는이 기능이 기능은 (strclone
에) 새로운 포인터를 할당하는 작업을해야
char* strclone(char* src)
{
char* dst = (char*)malloc(strlen(src+1));
strcpy(dst,src);
return dst;
}
, 그것에 SRC 문자열을 쓰고, 새로운 문자열의 주소를 반환 있습니다. 문자열이 free
D 경우
그러나, 나중에 프로그램에 약간의 시간 :
str = strclone(some_str_variable);
// ..code..
free(str) ; //! ERROR!
오류가 읽
디버그 오류! 프로그램 : C : \ ... 힙 손상 감지 : 0x090CC448의 일반 차단 (# 39713) 이후. CRT가 응용 프로그램이 힙 버퍼의 끝 뒤에서 메모리에 쓰는 것을 감지했습니다.
프로그램에서 free(str)
을 호출하는 라인에서 오류가 발생합니다. str을 다음과 같이 변경하면 :
str = (char*)malloc(strlen(some_string_variable) +1);
strcpy(str, some_string_variable) ;
//...
free(str) ; //fine now
그러면 프로그램이 완벽하게 작동합니다.
strclone
기능이 예상대로 작동하지 않는 이유는 무엇입니까?
문제를 나타내는 ** 전체 ** 예를 게시 할 수 있습니까? –
@Oli : 한 줄이면 충분하지만 걱정하지 마세요! –