typedef unsigned char byte;
class A {
public;
... constructor ...
byte *get(byte *);
};
byte *A::get(byte *bs1) {
byte bs2[1024];
bs1 = bs2;
return bs1;
}
int main() {
A *a = new A();
//byte *bs;
//a->get(&bs);
//byte *&bs;
//a->get(bs);
byte *bs = NULL;
bs = a->get(bs);
while (1);
}
포인토 노무어렵다
요즘은 포인터 관리하는 풀이 따로 있어서 굳이 해제해줄 필요는 없다지만, 딜리트 하는게 더 낫죠
윈도우95가 아닌걸 감사해라
참 어렵정희
노노 배열값을 멤버함수에서 복사후 밖에서도 쓰려고함 get함수 끝나고 해제되어버리면 안돼
다만 main이 끝나면 delete 안해도 자동으로 해제될 수 있도록 new로 선언 안하고 배열로 바로 만들고 싶은데
저 배열 동적할당 밖에 답이 없겠네요. 정적으로 할당하면 딴데서 못쓰잖아 !!!
그냥 동적할당 하면 되긴 하는 문젠데 혹시 굳이 delete 안해도 되는 방법 없는가 싶어서 물어봤음...
get 안에서 배열 주소값하고 main에서 get 후에 가져온 포인터 값하고 같더라고... 그래서 아직 해제 안되고 남아있는건가 싶었음...
이게 main이 끝난 후에도 남아있으면 문제니까..
shared_ptr<A> a( new A() )
scoped_ptr<A> a( new A() )
auto_ptr같은거 쓰면 딜리트 할 필요 없긴한데 난 못 미더워
스마트 포인터들은 타입 명시 해야 된다고 되어있음..
으음!! 라즈베리파이에 돌려야하는데
아 템플릿 노무 어려워서 템플릿인줄 알았다가 검색해보고 댓글지움
정적으로 할 수 있는걸 왜 동적으로 하지. 정적으로 할당 해서 넘겨 줘도 상관없는데. 할당된 현재 블럭이 끝나면 그때 파기 되는데
get함수 끝날때 변수 자체가 사라져서 사실상 외부에서 접근 불가능하지 않나.
scope가 함수 안이었던 배열이 밖에서까지 끌려나와 쓰이면 해제될 타이밍을 더이상 못가지는거 아님??
A *a = new A(); 이 이야기 인줄 알았는데
저건 안대지 return "문자열" 이런건 상관없지만
bs 얘기임
지금 다시보니 main쪽 코드가 병신같긴한데
get 함수 안에서 printf("0x%p", bs2) 한거하고 main에서 get 다음에 printf("0x%p", bs) 한거하고 값은 같게 나오는거 보니 접근은 가능하지 않나 싶었음
음... 이런 느낌?
http://ideone.com/tWIAGK
http://ideone.com/sxylUj
아니.. 클래스 포인터는 어차피 상관 없는데..
얼레 멤버함수 안에 선언한 배열 주소값이 같네 컴파일시에 정적으로 할당된 공간이라 그런가
역시 그냥 멤버함수 안에서 동적할당해서 복사한 다음 넘겨줘야겠다