|
포인터 개념을 잘못 이해하고 계신 것 같습니다.
그리고, 하나의 new 연산자는 연속적인 메모리 공간을 할당하나, 여러개의 new로 동적할당한 메모리는 연속적인 메모리 공간을 할당 되지 않을 수도, 될 수도 있습니다. memcpy, memset, memcmp 등의 ANSI-C 함수는 연속적인 메모리 공간에 대한 처리 함수입니다. 따라서 당연히 에러가 납니다. 배열(정적 메모리 할당)의 경우에는 연속적인 메모리 공간을 할당 받습니다. 실제 할당된 메모리 공간도 잘못 계산 되었구...
// 아래 소스는 정확하지 않을 수 있습니다. 제가 해 본 게 아니라서... 그냥 참조만 하세요. 먼가 힌트를 발견하실 수 있을 것입니다.
Test = new (AA*) [N];
for ( int i = 0; i < N; i++ )
{
Test [i] = new AA [M];
}
for ( int i = 0; i < N; i++ )
{
memset (Test+i, 0, sizeof (AA)*M);
// 또는 memset (Test+i, 0, sizeof (Test[i]));
}
// N이 100이라고 가정함
최흥배 님이 쓰신 글 :
: memcpy 사용하는데 에러가 나오는데 잘 모르겟네요..
: 에러 내용이 메모리 침범 인것 같은데.. 코드는 다음과 같급니다.
:
: struct aa
: {
: int a;
: int b;
: }AA;
:
:
: ......
:
: struct AA **Test;
: .....
:
: Test = new AA*[N];
: for(int i=0; i<N;++i)
: {
: Test[i] = new AA[M];
: }
:
: .....
:
: memcpy(Test,0,N*M); // Test를 0 으로 초기화 시킴.
: 대충 이렇는데 memcpy부분에서 에러가 나네요..
:
: 좀 가르쳐주세요...
:
:
:
|