C语言 访问嵌套结构



我在访问包含在dog中的检查结构时遇到了一些麻烦。由于狗被包含在包含中,我假设我只会指向从容器中的狗的检查,但这似乎会在尝试添加检查日期或替换一个时导致错误。

    // used to create a linked list of containers, each contaning a "dog"
    struct container {
    struct dog *dog;
    struct container *next;
     } *list = NULL;
    // used to hold dog information and linked list of "checkups"
     struct dog {
        char name[30];
        char breed[30];
        struct checkup *checkups;
    };
  // used to create a linked list of checkups containing "dates"
    struct checkup {
        char date[30];
        struct checkup *next;
    };

这里是代码,我试图添加一个新的日期到检查,但当它试图添加它在我的程序崩溃。如果你能告诉我为什么会这样,我将不胜感激。

    void add_checkup(char* name, char* date)
    {
        struct container *tempList = list;
        struct checkup *tempCheck = (struct checkup *) malloc(sizeof(struct       checkup));
        while (tempList != NULL) {
           if (strcmp(tempList->dog->name, name) == 0) {
                strcpy(tempCheck->date, date);
                strcpy(tempList->dog->checkups, tempCheck);
            }
            tempList->next;
        }

   }

为什么使用strcpy()来设置struct checkup *的值?它试图将源指针指向的数据复制到假定目标指针指向的数组中,而事实上,我认为没有特别的理由假设目标指针是有效的。当然,没有理由假设源数据具有char的空终止数组的形式,因此您的原始代码在这里是严重错误的。

简单赋值更可能是正确的:

tempList->dog->checkups = tempCheck;
但是,请注意,这会带来严重的内存泄漏风险,因为tempList->dog->checkups的前一个值会丢失。还要注意,它与函数名的 add_ 部分所暗示的行为不匹配——它更像set_
如果你想让每只狗都能进行一次以上的检查,那么你就需要做更多的工作。

相关内容

  • 没有找到相关文章

最新更新