相关疑难解决方法(0)

你什么时候在C++中使用ZeroMemory结构?

我已经看过使用ZeroMemory的示例(主要是使用windows和directx结构),但有时却没有使用它.我什么时候应该ZeroMemory结构?

c++ memory struct zero

3
推荐指数
2
解决办法
8031
查看次数

为什么返回未初始化的值被视为未定义的行为?

在阅读本文时,我看到了一个我不了解的UB,希望您能澄清一下

size_t f(int x)
{
    size_t a;
    if(x) // either x nonzero or UB
        a = 42;
    return a; 
}
Run Code Online (Sandbox Code Playgroud)

我猜UB是由于a没有初始化的值,但这不是它定义的行为吗?意思是,无论f(0)变量a是什么, 都将返回其所保存的值(我认为这类似于rand())。我们是否必须知道代码片段返回的值使代码具有明确定义的行为?

c initialization undefined-behavior

3
推荐指数
1
解决办法
127
查看次数

如果不为每个分配 1,“ int x,y,z = 1 ”在做什么?

我是 C/C++ 新手,我注意到我的程序计算了错误的值。我发现问题在于我对 C/C++ 中变量声明的工作方式的理解。 x,y,z = 1,2,3在 Python 中工作正常,而 asx,y,z = 1则不然。 int x,y,z = 1,2,3不能在 C/C++ 中工作,但int x,y,z = 1可以,因为cout << x;输出 16,我预计它是 1。

#include <iostream>
using namespace std;

int main() {

    int x, y, z = 1;
    cout << x;
    
    return 0;

}

// The output is 16
Run Code Online (Sandbox Code Playgroud)

int x,y,z = 1如果不为每个分配 1,则操作在做什么?

c++ variable-assignment

3
推荐指数
1
解决办法
97
查看次数

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

为什么在声明期间存储垃圾值?

我多次听说过,如果你没有初始化变量,那么garbage value就存储在变量中.

int i;
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)

上面的代码打印任何垃圾值,但我想知道如果未初始化,存储垃圾值需要什么?

c variable-declaration garbage

2
推荐指数
3
解决办法
2463
查看次数

析构函数直接用C++调用

因此下面的代码.

class A
{
    int x;
public:
    A() {x = 3;}
};


int main()
{
    void* mem = operator new(sizeof(A));
    A* obj = static_cast<A*>(new(mem)(A));
    std::cout << obj->x << std::endl;
    obj->A::~A();
    std::cout << obj->x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是:为什么我可以直接调用A的析构函数; 我的第二个问题是:为什么输出是:

3
3
Run Code Online (Sandbox Code Playgroud)

在析构函数调用后,对象obj不会被删除?第二个困扰我.

c++ destructor placement-new new-operator

2
推荐指数
1
解决办法
549
查看次数

自动初始化局部变量

我有以下代码片段.

int j;
printf("%d",j);
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了垃圾值.

32039491

但是当我在上面的代码片段中包含一个循环时,就像

int j;
print("%d",j);
while(j);
Run Code Online (Sandbox Code Playgroud)

我在该程序的多次试验中得到以下输出.

0

我一直认为局部变量默认初始化为垃圾值,但看起来变量在使用循环时会自动初始化.

c variables scope initialization

2
推荐指数
1
解决办法
113
查看次数

可以(a == 1 && a == 2 && a == 3)在C或C++中评估为true吗?

我们知道它可以用JavaJavaScript.

但问题是,可以在下面的条件永远评估为true 在C或C++?

if(a==1 && a==2 && a==3) 
    printf("SUCCESS");
Run Code Online (Sandbox Code Playgroud)

编辑

如果a整数.

c c++

2
推荐指数
3
解决办法
414
查看次数

在C中没有得到NULL指针错误

我故意试图在C中获取NULL指针,但我没有这样做.这是我编码的内容:

int main(void) {
  int x; //UNINITIALIZED so that it will represent "nothing"
  int *null_test = &x;
  printf("This should be null   %p \n", null_test);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个地址:0x7fd96c300020这似乎NULL不像我希望的那样.

为什么?我甚至没有初始化x但仍然不是null?

c pointers

1
推荐指数
2
解决办法
165
查看次数

Valgrind将指针与NULL进行比较

我正在使用Valgrind来调试我的代码,当我struct通过比较来测试是否初始化时,我会收到警告NULL.

void main()
{
    int *unassignedPointer;
    if(unassignedPointer == NULL)
        printf("This Pointer is NULL\n");
}
Run Code Online (Sandbox Code Playgroud)

此代码编译并运行,但是当通过Valgrind运行时,它会发出警告:条件跳转或移动取决于未初始化的值.与之比较的重点NULL是确定它是否已初始化.这是一种危险的做法,还是应该忽略这些警告?

c valgrind

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