0

对不起,如果我的问题不是很清楚。我有这样的结构:

typedef struct
{
    uint32_t typeSet;
}DataTypeTagInfo;

以下函数用于统一两个 typeSet:

DataTypeTagInfo* unifyTagInfo(DataTypeTagInfo* tag1, DataTypeTagInfo* tag2){
    if(tag1 == NULL) return tag2;
    else if(tag2 == NULL) return tag1;
    tag1->typeSet |= tag2->typeSet;
    return tag1;
}

程序在执行以下行时退出:

    tag1->typeSet |= tag2->typeSet;

在示例运行中,我具有以下值:

tag1->typeSet = 3917954189
tag2->typeSet = 2536589

没有错误信息。干脆放弃。请帮忙。

4

1 回答 1

2

您显示的代码非常合理。tag1因此,在中止时,或者tag2是一个无效的指针很可能是一个无效的指针。这与您发布的代码无关。可以通过多种方式将指针设置为无效。

为了弄清楚发生了什么,我会从仔细检查代码设置tag1tag2调用站点开始,然后 - 如果没有出现答案 - 继续使用valgrind来检查内存覆盖错误。

NB 这就是让 C(++) 如此具有挑战性的原因。

于 2012-09-04T00:47:43.250 回答