2014-05-23 4 views
0

변경하고 싶습니다 malloc, memcpy무료 기능을 사용하고이 libhooker를 LD_PRELOAD와 함께 사용하십시오.
나는 그들을 변경하고 몇 가지 테스트 케이스에 대한 그들을 테스트합니다. 그러나 그들 중 하나에서, 제 코드가 올바로 작동하지 않고 이유를 모르겠습니다.
테스트 케이스 :C는 상수 문자열에 메모리를 어떻게 할당합니까?

int main() 
{ 
    string s = "Hello"; 
    return 0; 
} 

내 코드 출력 :

malloc[0x8229170-0x8229182] 
[memcpy] source address 0x8048850 is not allocated. 
free(0x8229170) 

내가 상수 문자열 왜 내 코드가 잘못된 메모리를 할당 c는 방법을 모르겠어요.
미리 감사드립니다.

+5

문자열? C++을 의미합니까? – Salgar

+2

배경 정보를 제공 할 예정입니다. 그 프로그램을 실행하면 그 결과물을 어떻게 생산합니까? 문자열 리터럴은'malloc '에 의해 할당되지 않습니다. 그것은 데이터 세그먼트 (구현에 따라 다름)의 일부이고'malloc/free'에 의해 관리되지 않습니다. –

+1

가능한 중복 : http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go –

답변

3

문자열 상수는 일반적으로 프로그램의 DATA 섹션에 할당됩니다. 이것은 일반적으로 읽기 전용으로 표시되며 위치 오프셋은 컴파일 타임에 정의됩니다.

이 메모리는 보통 malloc에 의해 할당되지 않습니다.

memcpy로 무엇을 하려는지 잘 모르겠지만 memcpy에 할당하려는 모든 것이 malloc을 사용하여 할당되었다고 가정 할 수는 없습니다. 예를 들어 스택에 할당 된 모든 것. 데이터 섹션의 모든 것. 모든 것은 사용자 정의 할당자를 사용하여 할당됩니다 (스택에있을 수 있음). 또한 calloc, allocrealloc도 알고 있어야합니다.

+0

고마워요! 그것은 너무 도움이되었다 :) – user3541386

관련 문제