如何在C中管理字符串的动态数组

时间:2018-07-04 21:40:52

标签: c arrays pointers segmentation-fault malloc

我有一个代表食谱的结构。我不知道如何处理成分和程序,因为我首先不知道我需要多少内存来存储所有信息。 我用这种方式初始化了结构

j

我试图以此方式分配它们

length(j:k)

但是当我尝试在其中写入内容后,我得到了一个奇怪的输出。在打印出字符串后,我在过程结束时释放了内存,但是程序的行为很奇怪,这很可能是因为我遇到了段错误,但实际上却不明白。那是因为我以错误的方式分配了内存吗? 在我结束该过程之后,它说返回值为1。

这就是我取消引用指针的方式

for (i in j:k) {
   print(i) 
   if (i>16) break
}

在尝试放置一个计数器以记住我使用了多少内存并仅释放未使用的内存后,我得到了此输出

struct _recipe
{
    char name[50];
    char** ingredients;
    char diff[12];
    int time;
    int calories;
    char** procedure;   
} recipe;

我知道我使用计数器以不正确的方式取消了引用,但是如果我编辑并取消引用了所有50个元素,程序将崩溃。无论如何要得到这个结果,我将其输入: 名称:苹果派 成分:苹果              糖              面粉              牛奶 难度:容易 以分钟为单位的时间(准备时间):60 卡路里:230 步骤:将牛奶和面粉混合            加苹果            烤他们 然后该过程返回1。我知道这是描述食谱的一种可怕方法,我只在输入中输入了几个字符串以显示其结束方式

那是我的全部代码,我不知道如何消除错误

recipe.ingredients = malloc(sizeof(char*) * 50);
recipe.procedure = malloc(sizeof(char*) * 50);

for(i = 0; i < 50; i++)
{
    recipe.ingredients[i] = malloc(sizeof(char) * 30);
    recipe.procedure[i] = malloc(sizeof(char) * 500);
}

1 个答案:

答案 0 :(得分:-1)

您的代码是正确的,也许这是取消引用的方式?

以下作品:

 for(int i = 0; i < 50; i++)
    {
        for(int j = 0; j < 30; j++){
            recipe.ingredients[i][j] = 'a';
        }
    }
printf("Hello %c", recipe.ingredients[3][4]);

如果您发布如何取消引用的代码,我们将为您提供进一步的帮助。