efence에서 No empty slot 0라는 에러메세지는?
글쓴이: icanfly / 작성시간: 수, 2005/03/09 - 5:02오후
3 int main(void) 4 { 5 int i, j; 6 7 int r = 30000; 8 int c = 10; 9 double **p0 = new double*[r]; 10 double **p1 = new double*[r]; 11 for(i = 0; i < r; ++i) 12 { 13 p0[i] = new double[c]; 14 p1[i] = new double[c]; 15 } 16 17 int r1 = 3000; 18 int c1 = 20; 19 double **p2 = new double*[r1]; 20 double **p3 = new double*[r1]; 21 for(i = 0; i < r; ++i) 22 { 23 p2[i] = new double[c1]; 24 p3[i] = new double[c1]; 25 } 26 27 28 //delete 29 for(i = 0; i < r; ++i) 30 { 31 delete [] p0[i]; 32 delete [] p1[i]; 33 } 34 35 delete [] p0; 36 delete [] p1; 37 38 for(i = 0; i < r1; ++i) 39 { 40 delete [] p2[i]; 41 delete [] p3[i]; 42 } 43 44 delete [] p2; 45 delete [] p3; 46 }
위와 같은 코드를 -lefence 를 주고 컴파일 실행하니까..
ElectricFence Aborting: Electric Fence: Internal error in allocator: No empty slot 0. Illegal instruction
라고 나옵니다. 할당량을 좀 줄이니까 별 불평을 하지 않는군요.
무엇이 문제인지....
gcc 3.3.2, efence 2.4.11 을 사용했습니다.
그럼...
Forums:
21 라인이for(i = 0; i < r1; ++i)
21 라인이
for(i = 0; i < r1; ++i)
로 되야 할 것 같은데요. (r이 아니라)
아..예 그렇긴한데...그건 그냥 단순한 오타입니다. r1으로 해
아..예 그렇긴한데...그건 그냥 단순한 오타입니다.
r1으로 해도 마찬가지거든요..
T.T
그냥 잊어먹고 있다가 오늘 집에 좀 일찍 들어온 관계로 위 코드에 r,c
그냥 잊어먹고 있다가 오늘 집에 좀 일찍 들어온 관계로 위 코드에 r,c값을
바꿔가면서 컴파일을 해보았는데요.....
r = 30000, c = 10 일때는 에러가 났는데..
r = 3000, c =100 일때는 깨끗하게 실행이 됩니다.
심지어 r = 3000, c=1000 도 잘되는군요.
이거 무슨 조환지? 포인터 배열을 많이 잡으니 에러가 나는군요.
일반변수배열은 더 크게 잡아도 멀쩡하고..
그럼 대충 추측가시는거라도 좋으니....답글을 달아주세요..
Re:
Electric Fence 에서 내부적으로 할당/해제하는 메모리 리스트를 관리하는듯 싶더군요.
그 리스트 갯수가 많아질때 문제가 되는게 아닐까 싶네요
댓글 달기