在C++中,是否有标准方法(或任何其他方式)来捕获由内存访问冲突触发的异常?
例如,如果出现问题且程序试图访问不应该访问的内容,您将如何收到错误消息,显示"内存访问违规!" 而不只是终止进程而不是向用户显示有关崩溃的任何信息?
我正在使用MinGW为Windows编写游戏,如果这有帮助的话.
我一直使用_pgmptr,它是char*Windows 提供的,它给出了可执行文件的准确完整路径。然而,最近更新 MinGW 后,它似乎被定义为 NULL。有没有其他方法可以获取完整的可执行路径,而无需其名称(例如,而不是仅仅C:\program.exe适合C:\我正在做的事情)?
我喜欢独立于平台的方式或特定于 Windows 的方式,只要它可靠即可。
以负数执行按位移位是否有效?例如,如果我有以下代码:
#include <stdint.h>
uint32_t reverse_bits (uint32_t n)
{
uint32_t result = 0;
for (int i = 0; i < 32; i++)
{
uint32_t bit = n & (1 << i);
bit <<= 31 - i * 2;
result |= bit;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是不是我可以期望在所有体系下工作(具体而言,表达式的结果x << shift_amt,其中shift_amount < 0是真实的,就相当于x >> -shift_amt)?
注意:这不是关于对负数执行按位移位的行为的问题(即-1 << 1).
这是完整的测试程序:
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
uint32_t reverse_bits (uint32_t n)
{
uint32_t result …Run Code Online (Sandbox Code Playgroud) 我是新手使用winsock2并为我正在尝试使用的服务器放置以下代码,以便将字符串发送到我在同一台计算机上运行的客户端(使用相同的端口连接到127.0.0.1)因为服务器设置为侦听).
我正在使用MinGW,如果这很重要的话.
我遇到的问题是listen()似乎提前完成但返回成功代码.这是一个问题,因为当调用accept()时,它似乎永远阻止.无论我是否正在运行客户端程序,都会发生此事件,并且我已尝试在之前和之后运行客户端程序,但这似乎不会影响它.
// -1: "Could not initialize WSA."
// -2: "Could not create listener socket."
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <cstdio>
#define port 0x0ABC
UINT64 trStrLen (char* str)
{
if (str == NULL) return 0;
UINT64 pos = 0;
while (*(str + pos) != '\0') pos++;
return pos;
};
#include <cstdio>
int main ()
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2,0),&wsadata)) return -1;
SOCKET server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
memset(&sin,0,sizeof(SOCKADDR_IN));
sin.sin_family = …Run Code Online (Sandbox Code Playgroud)