0

我正在尝试重新分配数组的大小,但它没有改变。我可以把它分成两个问题:

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 后,我检查长度,它仍然是 1。

我究竟做错了什么?

4

1 回答 1

7

重要的是要记住它是在编译时sizeof评估的;因此它不知道可变长度数组。它给你的只是与数组关联的隐式指针的大小。(请记住,在 C 中,指针和数组是等价的)。

于 2013-06-18T13:08:02.447 回答