2011-03-12 5 views
0

문자열을 저장하기 위해 2D 배열로 구조체를 만들려고합니다. 하지만 난이 프로그램을 실행할 때 두 번 무료로 오류가 계속구조체의 2D 배열이 가능합니까?

구조체 다음을 야기 된 것으로 판단 될 것입니다

struct room * newRoom = malloc(sizeof(struct room)); 
newRoom->floor = malloc(sizeof(char *) * height); 
if(newRoom->floor == NULL || newRoom == NULL) 
{ 
    printf("Room allocation failed \n"); 
} 
for(i=0; i<width ;i++) 
{ 
    newRoom->floor[i] = malloc(sizeof(char) * (width + 1)); 
    if(newRoom->floor[i] == NULL) 
    { 
     printf("Room string allocation failed \n"); 
    } 
} 

내 무료, 다음은

struct room{ 
     int x; 
     int y; 
     char ** floor; 
}; 

내 malloc에있다 오류 :

for(i=0; i<size ;i++) 
{ 
    free(toBeFreed->floor[i]); 
} 
free(toBeFreed->floor); 
free(toBeFreed); 

나는 문자로 채우는 이외의 다른 배열을 사용하지 않습니다. ops) 그리고 mvprintw()를 호출하지 마십시오. 사이에 문제가 있다고 생각합니다. 내가 뭘 잘못하고 있니?

편집 : 그래서 분명하지만 했어야 폭 == 높이 == 크기, 변수가 다른 파일에있는, 그래서 그들은 조금

EDIT2 다를 수행합니다! 분명히 높이 = 폭, 그리고 내가 할 수있는 ' 심지어 내 자신의 변수 이름을 유지하지 마라! 할당 할 때

답변

1
for(i=0; i<width ;i++) 

을해야 하는가?

for(i=0; i<size ;i++) 
{ 
    free(toBeFreed->floor[i]); 
} 

는 또한 2가에서 오는가

malloc(sizeof(char) * (width + 2)); 

for(i=0; i<height;i++) 
{ 
    free(toBeFreed->floor[i]); 
} 

해야 하는가?

오히려 괜찮은 것 같습니다. 코드를 어떻게 사용하고 싶습니까?

+0

원래 '\ 0'문자로 문제가 있다고 생각했기 때문에 +2가 사용되었습니다. 높이 +1 크기로 다시 변경했습니다. 높이 = 크기 = 너비로, 다른 파일의 미리보기이므로 변경하는 것을 잊었습니다. 복사/붙여 넣기 할 때 그들 – jrisebor

+0

@ Snipe07하지만 ​​여전히 작동하지 않니? 만약에 아마 당신은 자유를 두 번하는 루틴을 부르고 있습니까? 무료 루틴에서 중단 점을 설정하고 값이 무엇인지 알기 위해 가파른가요? – stefan

+0

높이 고침! = 너비 좀 더 나은 변수 이름을 사용해야합니다! 고맙습니다! – jrisebor

3

당신이 사용

for(i=0; i<width ; i++) 

자유롭게 사용!

for(i=0; i<size ;i++) 

하는 폭 = 크기, 당신은 문제가 거라면.

for(i=0; i<height;i++) 

바로