簡體   English   中英

初始化結構數組奇怪的行為

[英]Initializing array of structs strange behavior

我正在使用一組結構,然后設置如下的元素:

#include <stdio.h>
#include <stdlib.h>

typedef struct _point {
    char s;
    unsigned int x;
    unsigned int y;
} point;

point* vehicle;

int main(int argc, char *argv[]) {
    /* 26 Vehicles */
    vehicle = malloc(26*sizeof(point*));
    for (int i = 0; i < 26; i++) {
        vehicle[i].s = ' ';
    }

    /* Print already existing vehicles */
    for (int i = 0; i < 26; i++) {
        if (vehicle[i].s != ' ') {
            printf("%c: x=%d y=%d\n", vehicle[i].s, vehicle[i].x, vehicle[i].y);
        }
    }

    return 0;
}

注意 :這不是實際的代碼(它太大而不能發布)但是數組和structs是相同的。

正如您所看到的,我將每個vehicle[i].s設置為空格字符,但循環打印以下內容(不是此示例代碼,而是在我的實際代碼中):

 : x=32215344 y=0 P: x=0 y=33 : x=2105376 y=0 

問題 :在第一個循環之后,如何在“背景”中修改某些元素而不在代碼中分配它們? 或者其他一些malloc操作可以覆蓋/重新分配內存嗎?

問題,正如我所看到的那樣

 vehicle = malloc(26*sizeof(point*));

你是為指向數據類型的類型分配內存,而你應該為數據類型本身分配。

詳細說明,你想為26個point類型元素(即struct _point )分配內存, 而不是 26 point *

更改

vehicle = malloc(26*sizeof(point));

或者,為了更好,

vehicle = malloc(26*sizeof * vehicle);

否則,當您嘗試dererference的指針來訪問你正在運行的短分配內存的n實例秒。 因此,您最終會訪問導致未定義行為的超出內存。

也就是說,只是一個建議,如果你知道預先分配的大小,(例如26 ),不要使用動態內存,不需要它。 使用數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM