复制到 C 中的 Null 位置并传递无效数据时崩溃

标签 c memory crash null

<分区>

我有以下结构:

struct PList{
    Person value;
    PList* next;
}

struct Person{
    char name[100];
    PersonID ID;
    float amountOwed;
}

struct PersonID{
    int number;
    char letter;
}

在主要方法中:

Person n;
// n is inputted from the user
addPersonToList(&n, &customers); //customers is a PList

这是 addPersonToList 的代码:

void addPersonToList(Person* p, PList* pdb) {
        PList* db;
        db = pdb;
        while (db->next != NULL ) {
                db = db->next;
        }
        PList a;
        a = createNewPList();  // this simply assigns next to NULL and value to an empty Person
        a.value = *p;
        memcpy(db->next,&a,sizeof(PList)+sizeof(Person)+sizeof(PersonID));
}

这里是createNewPList

PList createNewPList() {
        PList a;
        a.next = NULL;
        a.value = constructPerson("", constructPersonID(' ', 0), 0);
        return a;
}

问题 1未解决 当调用 addPersonToList 方法时,除了 p->Id.number 之外,Person 中的所有值都被正确传递。这完全混淆了方法调用之前和方法调用之后。

问题 2 已解决 我也尝试了 db->next = a; 而不是 memcpy以及手动分配所有值。 但是在那一行程序崩溃了,我假设是因为 db->next 当前为 NULL

至于错误,没有显示错误。程序直接崩溃了。

感谢任何解决方案

最佳答案

你有

while (db->next != NULL )
/* ... */
memcpy(db->next

根据定义,这总是错误的,因为它总是将 memcpy 转换为 NULL。您需要将内容分配给 db->next。我怀疑您只需要删除memcpy 并说:

db->next = createNewPList();

编辑

在看到更多令人惊叹的代码后,您可能想要:

db->next = malloc(...);
memcpy(db->next, &a ... );

关于复制到 C 中的 Null 位置并传递无效数据时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14185400/

相关文章:

.net - 调试应用程序中的巨大内存泄漏

performance - 哪些简单的更改对您的 Delphi 程序进行了最大的改进

ios - swift 2 : Image picker crashes after at didFinishPickingMediaWithInfo

c - 用 C 拆分字符串

c - 通过 typedef 对数组私有(private)的结构内容的错位可能性

c - Linux 文件属性检查

ios - SpriteKit : Weird crash when preloading texture atlases

c - 审查代码并评论 c linux 和网络专家

c - 存储 gsl 矩阵的外部结构

android - 在实际设备上运行应用程序时出现问题