2013-06-18 3 views
0

배열의 크기를 재 할당하려하지만 변경되지 않습니다. 나는이 문제를 분리 할 수 ​​있습니다 : 내가 첫 번째 행을 malloc을 한 후배열 크기 재 할당

Coordinate *closeCoordinatesArray = malloc(sizeof(Coordinate) * 0); 

    Coordinate nextCoordinate = coordinatesMainArray[nextCoordinateIndex]; 

    for (int p = 0; p < 4; p++) { 
     switch (p) { 
      case 0: 
       if (((nextCoordinate.x - 1) >= 0) && ((nextCoordinate.y - 1) >= 0)) { 
        int sizeOfArray = sizeof(*closeCoordinatesArray); 
        int sizeOfFirstObject = sizeof(closeCoordinatesArray[0]); 
        int closeCoordinatesArrayLength = (sizeOfArray/sizeOfFirstObject); 

        closeCoordinatesArray = realloc(closeCoordinatesArray,sizeof(Coordinate) * (closeCoordinatesArrayLength + 1)); 

        sizeOfArray = sizeof(*closeCoordinatesArray); 
        sizeOfFirstObject = sizeof(closeCoordinatesArray[0]); 
        closeCoordinatesArrayLength = (sizeOfArray/sizeOfFirstObject); 

는, 그것의 길이는 것을 보여준다 1. 나는 그것이 있어야 가정 것이다 0 (내가 그것을 0되고 싶어). 경우 0에서 realloc과 그 후

나는 길이를 확인하고 내가 뭘 잘못 여전히 1.

입니까?

답변

7

sizeof의 컴파일 시간은 입니다. 따라서 가변 길이 배열에 대해 알 수 없습니다. 모든 것은 배열과 관련된 암시 적 포인터의 크기입니다. C 포인터와 배열은 동등한 것을 기억하십시오.

+2

또한 sizeof (* closeCoordinatesArray)와 sizeof (closeCoordinatesArray [0])는 둘 다 같은 것을합니다. 단일 배열 요소의 크기를 지정하십시오. –