小编Vin*_*rta的帖子

除零预防

什么是1.#INF为什么以及为什么要投掷 floatdouble防止因崩溃而被分割?
还有,如何防止0分裂的任何好主意?(像任何宏或模板一样)?

int nQuota = 0;

int nZero = 3 / nQuota; //crash
cout << nZero << endl;

float fZero = 2 / nQuota; //crash
cout << fZero << endl;
Run Code Online (Sandbox Code Playgroud)

如果我改用:

int nZero = 3 / (float)nQuota;
cout << nZero << endl;
//Output = -2147483648

float fZero = 2 / (float)nQuota;
cout << fZero << endl;
//Output = 1.#INF
Run Code Online (Sandbox Code Playgroud)

c++

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

如果新的失败,是否需要检查指针有效性?

正如标题所说,我知道new会抛出一个可以捕获的异常,但是指针究竟发生了什么?它变成了NULL?我在SO上检查了一些答案,但没有人解释.检查下面的例子,指针保持在堆上?请提供有关此模式的完整信息

#include <windows.h>
#include <cstdlib>
#include <iostream>

using namespace std;

enum eReadMode
{
 //    READ_ONLY,
     READ_WRITE,
    // CREATE_FILE,
   //  CREATE_WRITE_FILE,
};

class CFileStatic
{
private:
    FILE *m_File;
public:
    CFileStatic( LPCTSTR szFileName, eReadMode eMode );
    virtual ~CFileStatic() {};

    bool IsValidFile() const { return( m_File != NULL ); };
    void PrintFile( unsigned int uLine = 0 );
};

CFileStatic::CFileStatic( LPCTSTR szFileName, eReadMode eMode )
{
    if( szFileName )
    {
        if( eMode == READ_WRITE )
            m_File = fopen( szFileName, "r+" );
        else
            printf( …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

将它转换为基类指针是否安全?

我正在学习C++,这次我搞乱了指针,研究了this指针和多态.我的问题是,转换是否安全,我知道基本上我可以m_uConnectedUsers直接从CUser课堂上访问因为'公共',但我可能会找到一个需要它的机会,我想知道你的专业人士的意见它.

#include <windows.h>
#include <iostream>

using namespace std;


class CUserCounter
{
public:
    CUserCounter();
    virtual ~CUserCounter(){};

    BOOL m_bEmpty;
    u_long m_uConnectedUsers;
};

CUserCounter::CUserCounter()
{
    m_bEmpty = TRUE;
    m_uConnectedUsers = 0;
}

class CUser : public CUserCounter
{
public:
    CUser(LPCTSTR szName, BOOL bConnected, BOOL bChatting = FALSE );
    virtual ~CUser(){};

    BOOL m_bConnected;
    BOOL m_bIsChatting;
    TCHAR szCharName[32];

    bool IncreaseMoverMeter( unsigned uMeters );
};

CUser::CUser( LPCTSTR szName, BOOL bConnected, BOOL bChatting )
{
    if( szName )
    {
        if( strlen( …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism pointers

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

extern必须能够访问类构造函数吗?

众所周知,有很多方法可以访问班级成员,我现在的问题是.如果类构造函数/解构函数是公共的,那么'new'用法是允许的,也是'extern',如果它是私有的,我可以使'GetInstance'只允许不允许'new'使用的类,这对类很有用应该只有1个指向实例(例如,计算当前登录用户的服务器),而"new"适用于指向许多对象的classe(例如指向新对象的类,例如a新玩家记录int,它会创建一个指向它们每个on的新指针),而map会存储指向该对象的'new'的指针.问题是,不应该允许'extern'从全局对象私有构造函数访问吗?既然'新'用法是不允许的?看看下面的例子:

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <map>

using namespace std;


//CMover.h-------------------------------------
#define MAX_MOVER_NAME 32

class CMover
{
private:
    BOOL m_bInitialized;
    BOOL m_bIsWalking;
    unsigned m_uMetersPercused;
    TCHAR m_szName[MAX_MOVER_NAME+1];

    //CMover( LPCTSTR szMoverName, BOOL bInitialized = TRUE, BOOL bWalking = TRUE, unsigned uMeters = 0 );

public:
        CMover() { };
    virtual ~CMover(){};
};
//---------------------------------------------



//CMover.cpp---------------
CMover g_Mover; //CMover was created in order to have many 'new' usage, so each 'new' object points to a new player
// Making a global object of …
Run Code Online (Sandbox Code Playgroud)

c++ constructor pointers class extern

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

这个程序泄漏内存吗?

由于返回进程ID的新用法?如何通过调试我的应用程序来检查内存何时开始泄露?(这个长度检查解释部分确实很糟糕= P)

#include "stdafx.h"
#include "Process.h"
#include <TlHelp32.h>
#include <iostream>



DWORD GetProcessId( const wchar_t* szProcess )
{
    if( szProcess )
    {
        HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
        PROCESSENTRY32 *pe32 = new PROCESSENTRY32();
        memset( pe32, 0, sizeof( PROCESSENTRY32 ) );
        pe32->dwSize = sizeof( PROCESSENTRY32 );
        //Process32First( hSnapshot, pe32 );
        while( Process32Next( hSnapshot, pe32 ) )
        {
            if( pe32->szExeFile && !wcscmp( szProcess, pe32->szExeFile ) )
            {
                CloseHandle( hSnapshot );
                return( pe32->th32ProcessID ); //   std::wcout << pe32->szExeFile << std::endl;
            }
        }
        CloseHandle( …
Run Code Online (Sandbox Code Playgroud)

c++ windows

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

标签 统计

c++ ×5

pointers ×3

class ×1

constructor ×1

extern ×1

polymorphism ×1

windows ×1