重新分配数组大小给我没有变化

Nim*_*hai 0 c

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

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);
Run Code Online (Sandbox Code Playgroud)

在第一行中我将它malloc后,它显示它的长度为1.我认为它应该是0(我希望它为0).

在重新分配后,在0的情况下我检查长度,它仍然是1.

我究竟做错了什么?

Bat*_*eba 7

重要的是要记住sizeof编译时进行评估; 因此它无法知道可变长度数组.它给你的全部是与数组关联的隐式指针的大小.(请记住,在C指针和数组中是等效的).

  • 另外,`sizeof(*closeCoordinatesArray)`和`sizeof(closeCoordinatesArray [0])`都做同样的事情 - 给出一个数组元素的大小. (2认同)