相关疑难解决方法(0)

在什么情况下vtable指针可以为null(或0x1)?

我正在调试一个崩溃日志.发生崩溃是因为(c ++ - )对象的vtable指针是0x1,而对象的其余部分似乎可以从崩溃日志中看出来.

程序在尝试调用虚方法时崩溃.

我的问题:在什么情况下vtable指针变为空?operator delete是否将vtable指针设置为null?

这在OS X上使用gcc 4.0.1(Apple Inc. build 5493)发生.

c++ crash macos gcc vtable

7
推荐指数
3
解决办法
4802
查看次数

何时在复杂表达式中评估后缀增量运算符?

说我有这样的表达

short v = ( ( p[ i++ ] & 0xFF ) << 4 | ( p[ i ] & 0xF0000000 ) >> 28;
Run Code Online (Sandbox Code Playgroud)

p作为一个指针的32位整数的动态分配的数组.

究竟i递增?我注意到上面的代码提供了v与以下代码不同的值:

short v = ( p[ i++ ] & 0xFF) <<   4;
v |= ( p[ i ] & 0xF0000000 ) >>  28;
Run Code Online (Sandbox Code Playgroud)

我对这种行为的最佳猜测是,i|评估上面的右侧之前不会增加.

任何见解将不胜感激!

提前致谢,

\比约恩

c c++ operators

6
推荐指数
3
解决办法
2302
查看次数

std :: copy和std :: vector问题

我理解为什么这会导致段错误:

#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    vector<int> v;
    int iArr[5] = {1, 2, 3, 4, 5};
    int *p = iArr;

    copy(p, p+5, v.begin());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但为什么这不会导致段错?

#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    vector<int> v;
    int iArr[5] = {1, 2, 3, 4, 5};
    int *p = iArr;

    v.reserve(1);
    copy(p, p+5, v.begin());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

6
推荐指数
2
解决办法
5126
查看次数

是(++ i)++未定义的行为?

(++i)++未定义的行为?在检索增量对象以进行后缀增量操作后,是否可能发生前缀增量的副作用?这对我来说似乎很奇怪.

我的直觉是,这在C++ 03中是未定义的,在C++ 11中定义良好.我对吗?

c++ undefined-behavior sequence-points language-lawyer c++11

6
推荐指数
1
解决办法
1615
查看次数

调试在不同位置崩溃10次的程序

您将获得在运行时崩溃的应用程序的源代码.在调试器中运行10次后,您发现它永远不会在同一个地方崩溃.该应用程序是单线程的,仅使用C标准库.哪些编程错误可能导致此崩溃?你会如何测试每一个?

c debugging

6
推荐指数
2
解决办法
8120
查看次数

未定义的行为:代码审查的清单

可能重复:
C++程序员应该知道的所有常见的未定义行为是什么?

我准备为C++自我和同行代码评审准备一份清单或指南,因为有太多的场景可能导致可怕的领域Undefined Behavior,我想要提出一种在大多数使用最多的未定义行为的清单C++语言结构.

当然,不可能通过修改变量来预测未定义的行为,Sequence points但我认为可以列出从其他场景中发现的场景.

如果您正在执行代码审查,Undefined Behavior您会注意哪些常见的生成方案?

c++ undefined-behavior

6
推荐指数
1
解决办法
1918
查看次数

数组[i] = i ++是否被C++标准所涵盖?

我有一个人声称这条线不在C++标准中:

int i(1);
array_of_int[i] = i++;
Run Code Online (Sandbox Code Playgroud)

该人士表示,将指派1,但我们无法知道它是否会在array_of_int[1]array_of_int[2]虽然Visual Studio和大多数编译器都会在array_of_int[1].

他是对的吗?

c++ standards

6
推荐指数
1
解决办法
680
查看次数

访问超出C和C++限制的数组

int data[8];
data[9] = 1;
Run Code Online (Sandbox Code Playgroud)

c ++标准对此有何评论?这是未定义的行为吗?

至少C编译器(gcc -std = c99 -pedantic -W -Wall)对此没有任何说明.

谢谢.

c c++ arrays undefined-behavior

6
推荐指数
1
解决办法
3720
查看次数

以下语句在ANSI C中是否有效?它有效吗?

在准备考试时,ANSI CI遇到了以下问题 -

以下声明是否有效?
如果没有,请进行必要的更改以使其有效.

原始陈述是:test(i++,i++);它无效,因为根据K&R p202,行为未定义

参数的评估顺序未指定

但我可以将其更改为以下声明吗?test(i+=2, i+=3)

我在K&R或任何其他来源中没有看到这样的记录的问题.但XCode编译它并在没有任何警告的情况下运行.

c c89 sequence-points language-lawyer

6
推荐指数
3
解决办法
398
查看次数

const_cast无法运行c ++?

我有以下代码:

const int k=1;
    int *p=const_cast<int *>( &k);
    cout<<"k before="<<*p<<endl;
    *p=10;
    *const_cast<int *>( &k)=12;
    cout<<"k after="<<k<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

k before=1
k after=1
Run Code Online (Sandbox Code Playgroud)

为什么const const不在这里工作?

c++ const-cast

5
推荐指数
1
解决办法
467
查看次数