2013-04-11 7 views
0

다음과 같은 상황이 있습니다. 내 목표는 둘 다 같은 메모리를 가리키는 a와 b를 만드는 것이다. 그러나 조건은 둘 다 포인터라는 것입니다. 어떻게해야합니까? ab 같은 메모리에 두 점 때문에, 하나의 의지 (명백하게)에 대한 업데이트는 다른 영향을 미친다구조체의 포인터

struct myStruct 
{ 
struct anotherStruct* anoStrct; 
}; 
main() 
{ 
    struct myStruct *a=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    struct myStruct *b=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    a=b; 


} 
+1

코드에서 'malloc'(원래 'a')이 손실 된 메모리 영역이 손실되어 메모리 누수가 발생합니다. 메모리 누수 탐지기 (예 : Linux의 경우 valgrind)와 디버거를 사용하십시오. –

답변

6

당신은 예를 들어 하나의 포인터, a

struct myStruct *a= malloc(sizeof(struct myStruct)); 

등을위한 공간을 할당하고

struct myStruct *b = a; 

EDIT로 b이 포인터를 할당 할 수 있습니다 : 복사 포인터를하고 일부를 사용 작업을 할 때 조심해야합니다. 즉 복사본이 얕은 복사본인지 또는 깊은 복사본인지 여부를 결정합니다. 자세한 내용은 What is the difference between a deep copy and a shallow copy?을 참조하십시오.

ba으로 초기화 한 후 다음 명령문을 실행하면 원래 포인터가 이미 해제되어 있으므로 세그먼트 오류가 발생합니다.

free(b); 
a->anoStrct = malloc(sizeof(struct anotherStruct)); 
+4

malloc을 캐스팅 할 필요가 없습니다. http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc을 참조하십시오. – chrisw

+0

@ chrisw69 감사합니다. 방금 질문의 진술을 복사했습니다. . 내 시스템이 추락했을 때 나는 편집 중간에 있었다. :) – Ganesh

3
struct myStruct *a=malloc(sizeof(*a)); 
struct myStruct *b=a; 

참고. 또한 나중에 포인터 중 하나에 free을 호출해야합니다.

제안 된 코드는 두 변수가 동일한 메모리를 가리 키도록합니다. 그러나 원래 할당 된 메모리는 a입니다.

+0

고마워 친구 .. 어쩌면 4AM 때문인가, 나는 잠 들어있다. 나는이 어리석은 질문을했다. 당신이 나를 깨웠다. : – sattu

+1

@imonc ** 원래 b **에 배정 된 것은 의례가 아니다. 원래'a '에게 할당 된 것은 잃어버린다 –

+0

@Koushik 고마워, 그건 나에게서 부주의했다. 이제 수정되었습니다. – simonc

관련 문제