C++ Cout 在使用指针时崩溃
C++ Cout crashes when using pointer
我对C++很陌生,在开始时,我遇到了一个关于指针的令人沮丧的问题。请考虑以下代码:
#include <iostream>
using namespace std;
int main (){
int* mypointer;
*mypointer = 1;
cout << "Whats wrong";
}
它在运行时崩溃。我怀疑这与指针分配有关。但是在注释掉 cout 语句后,程序执行。通过将指针指定为
int* mypointer, myvar;
myvar = 1;
mypointer = &myvar;
程序运行,我可以将指针的值打印为:
cout << "value of pointer: " << *mypointer;
我得出的结论是,这将是指针的正确用法。
但是:为什么执行以下代码??:
#include <iostream>
#include <stdio.h>
using namespace std;
int main (){
int* mypointer;
*mypointer = 1;
printf("This works!n");
printf("I can even print the value mypointer is pointing to: %i",*mypointer);
}
简单地使用printf??我真的很感激大家的解释!
代码之所以执行,是因为您的编译器偶然设法优化了程序,以至于1
被"硬编码"到printf
调用中。
无论如何,它可能会这样做,使原始int
和指针都无关紧要,但在这种情况下,它并没有反映指针已损坏并且没有原始int
的事实。
因此,严格来说,这甚至不能反映程序的语义:正如您所发现的,为不存在的int
赋值(通过未初始化或其他无效的指针)是无稽之谈,并导致未定义的行为。
但这就是未定义行为的本质:任何事情都可能发生!编译器的作者正在充分利用这一点,他们意识到他们不必编写任何代码来使这种情况在逻辑上工作。因为是你违反了C++合同。:)
相关文章:
- 为什么要增加导致崩溃的指针
- 指针相关的UE4崩溃.我的指针哪里错了?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 由于指针算法错误,代码在 memcpy 中崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 智能指针的排序向量:神秘崩溃
- 类指针方法崩溃程序
- 在C++中删除指针数组时析构函数崩溃
- 使用push_back方法获取智能指针矢量时应用崩溃
- 为什么此代码在此 Trie 实现中使用映射 c++ 中的指针崩溃?
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 为什么此自定义指针类会崩溃?
- 为什么要删除指针崩溃wchar_t?
- C 指针崩溃(非初始化)
- 删除时指针崩溃无效,但指针不同
- 指向向量元素的指针崩溃
- 函数作用域中的指针崩溃
- 为什么指针崩溃所指向的数据会增加