访问嵌套结构

时间:2016-10-10 22:01:25

标签: c linked-list nested structure

我在访问dog中包含的checkups结构时遇到了一些问题。由于狗被包含在内,我认为我只是指向来自容器的狗的检查,但这似乎在尝试添加检查日期或替换一个时导致错误。

Sub LoopThroughFiles()

Dim wbk As Workbook 
Dim Filename As String
Dim FirstFile As String 
Dim FileDirectory As String
Dim x As Workbook

Set x = Workbooks.Open("test.xlsx")


With Application.FileDialog(msoFileDialogFolderPicker)

    .Title = "Please select a folder"
    .AllowMultiSelect = False
    .Show

    If .SelectedItems.Count = 0 Then
        MsgBox "You did not select a folder"
        Exit Sub
    Else
        FileDirectory = .SelectedItems(1) & "\"
    End If

End With

Set wbk = Workbooks.Add


Filename = Dir(FileDirectory)
FirstFile = Filename



Do Until Filename = ""

    Dim new_wb As Workbook
Set new_wb = Workbooks.Open(FileDirectory & Filename)



If FirstFile = Filename Then

    x.Sheets("report").UsedRange.Copy

    new_wb.Sheets("roster").Range("a1").PasteSpecial




End If


new_wb.Close savechanges:=True
Filename = Dir

Loop

MsgBox "All store totals have been added"

End Sub

以下是我尝试在检查中添加新日期的代码,但是当它尝试将其添加到我的程序崩溃时。关于为什么会发生这种情况的任何方向都将不胜感激。

    // 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;
    };

1 个答案:

答案 0 :(得分:0)

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

简单分配更可能是正确的:

tempList->dog->checkups = tempCheck;

但请注意,由于tempList-> dog->检查的先前值丢失,因此存在内存泄漏的严重风险。另请注意,它与函数名称的 add_ 部分所暗示的行为不匹配 - 它更像set_。如果您希望每只狗能够维持一次以上的检查,那么您需要做更多的工作。