c - 两个无符号整数的按位或(程序崩溃)

标签 c crash bitwise-or

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

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

没有错误消息。只是退出。请帮忙。

最佳答案

您显示的代码完全正确。因此,tag1tag2 很可能在中止时是无效指针。这与您发布的代码无关。可以通过多种方式将指针设置为无效。

为了弄清楚发生了什么,我首先仔细检查调用站点的代码设置 tag1tag2,然后 - 如果答案不是这样出现 - 继续使用 valgrind 检查内存覆盖错误。

注意,这就是 C(++) 如此具有挑战性的原因。

关于c - 两个无符号整数的按位或(程序崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12255368/

相关文章:

java - 启动应用程序时后台服务杀死我的应用程序

android - Android中的倒数计时器错误

c - char* 的位运算

C : reverse a string in place. 我使用了前面问题中回答的程序。它编译正常但因段错误而崩溃

c - C 中#define 预处理器的作用域

ios - 使用 EXC_RESOURCE 关闭应用程序,iOS 8 GM 上的 WAKEUPS 异常

java - 按位运算 OR on (double) 在 Java 中不可能,在 JavaScript 中可能

用于调用函数的 Python 管道符

c - 在 FFTW3 中进行二阶导数

c++ - CryptoAPI 和 XMLDSIG c、c++、delphi