簡體   English   中英

c 中的二維動態數組 - 訪問分配的變量

[英]2D dynamic array in c - accessing allocated variable

我(再次......)在 C 編碼的項目中苦苦掙扎。

請幫助我了解如何通過動態分配的二維數組訪問動態分配的變量。 每次嘗試都以失敗告終,我找不到正確的語法......

嘗試:將字符串放入分配到 **list 的新 Family 中的 family_name 指針中。

scanf(" %s",&lod->list[0]->family_name);

該程序:

#define _CRT_SECURE_NO_WARNINGS
//Libraries
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Consts, globals, structs 

#define MAX 10000

typedef struct person
{
    char *name;
    int gender;         //1-female, 0-male
} Person;

typedef struct family
{
    char *family_name;
    Person *mother, *father;    // parents' names
    Person **children_list; // list of the children in this family
    unsigned child_list_size;   // size of child_list array
    unsigned current_listChild_size;
} Family;

typedef struct listFamilys
{
    Family **list;
    unsigned current_listFamily_size;   // current size of family
}
ListFamilys;

//main
void main()
{
    ListFamilys *lod = (ListFamilys*) malloc(sizeof(ListFamilys));
        if(! lod) exit(0);
        lod->current_listFamily_size =0;
    lod->list = (Family**)malloc(sizeof(Family*));
    if (!lod->list) exit(0);
    printf("Enter family name: ");
    **scanf(" %s",&lod->list[0]->family_name);**
    system("pause");
}

這里的問題只是類型錯誤加上分配不足。 為了使它工作,您需要為一些 Family 指針(您正在做,雖然只有 1 個)分配空間,然后是一個實際的 Family 元素(您沒有做),然后為名稱分配空間(您是不做)。 基本上,代碼應該是

lod->list = (Family**) malloc(sizeof(Family*));
lod->list[0] = (Family*) malloc(sizeof(Family));
lod->list[0]->family_name = (char*) calloc(11, 1);

你只做第一行。 我在這里對calloc的使用有些隨意,10 個字符的限制也是如此。 您可以根據需要進行修改。

然而,雖然這是讓單個元素啟動並運行的最簡單方法,但這種方法在大規模上崩潰了,因為您必須執行多少分配,並且取消分配 memory 成為一場噩夢,因為使用此方法進行了多少單獨的分配方法。 因此,最好將 4kb 的名稱空間分配給一個單獨的指針,然后將個人和家庭的名稱字段指向相關名稱,而不是為每個名稱單獨分配。 依此類推,用它的 rest。 本質上,嘗試提取分配而不是像上面的代碼那樣逐個字段地使用它們。

暫無
暫無

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

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