[英]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.