亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? malloc1.c

?? 英文版的 想要的話可以下載了 為大家服務
?? C
字號:
/*
 * MALLOC1.C
 * C Malloc Demonstration Chapter 2
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "malloc1.h"


/*
 * WinMain
 *
 * Purpose:
 *  Main entry point of application.
 */

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hInstPrev
    , LPSTR pszCmdLine, int nCmdShow)
    {
    MSG         msg;
    PAPP        pApp;
    DWORD       dwVer;
    HRESULT     hr;

    SETMESSAGEQUEUE;

    //Make sure COM is the right version
    dwVer=CoBuildVersion();

    if (rmm!=HIWORD(dwVer))
        return 0;

    //Initialize OLE
    hr=CoInitialize(NULL);

    if (FAILED(hr))
        return 0;

    pApp=App_Create(hInst, hInstPrev, nCmdShow);

    if (NULL!=pApp)
        {
        if (App_Init(pApp))
            {
            while (GetMessage(&msg, NULL, 0,0 ))
                {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
                }
            }

        App_Destroy(pApp);
        }

    //Only call this if CoInitialize worked
    CoUninitialize();
    return 0;
    }





/*
 * MallocWndProc
 *
 * Purpose:
 *  Standard window class procedure.
 */

LRESULT APIENTRY MallocWndProc(HWND hWnd, UINT iMsg
    , WPARAM wParam, LPARAM lParam)
    {
    PAPP        pApp;
    ULONG       cb;
    UINT        i;
    BOOL        fResult;

    pApp=(PAPP)GetWindowLong(hWnd, MALLOCWL_STRUCTURE);

    switch (iMsg)
        {
        case WM_NCCREATE:
            pApp=(PAPP)(((LPCREATESTRUCT)lParam)->lpCreateParams);
            SetWindowLong(hWnd, MALLOCWL_STRUCTURE, (LONG)pApp);
            return (DefWindowProc(hWnd, iMsg, wParam, lParam));

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        case WM_COMMAND:
            switch (LOWORD(wParam))
                {
                case IDM_COGETMALLOC:
                    App_GetAllocator(pApp);
                    break;


                case IDM_RELEASE:
                    if (!App_HaveAllocator(pApp))
                        break;

                    App_FreeAllocations(pApp, TRUE);
                    App_Message(pApp, TEXT("Release complete"));
                    break;


                case IDM_ALLOC:
                    if (!App_HaveAllocator(pApp))
                        break;

                    fResult=App_DoAllocations(pApp, FALSE);

                    App_Message(pApp, fResult
                        ? TEXT("Alloc succeeded")
                        : TEXT("Alloc failed"));

                    break;


                case IDM_FREE:
                    if (!App_HaveAllocations(pApp))
                        break;

                    App_FreeAllocations(pApp, FALSE);
                    App_Message(pApp, TEXT("Free complete"));
                    break;


                case IDM_REALLOC:
                    if (!App_HaveAllocator(pApp))
                        break;

                    fResult=App_DoAllocations(pApp, TRUE);

                    App_Message(pApp, fResult
                        ? TEXT("Realloc succeeded")
                        : TEXT("Realloc failed"));

                    break;


                case IDM_GETSIZE:
                    if (!App_HaveAllocations(pApp))
                        break;

                    fResult=TRUE;

                    for (i=0; i < CALLOCS; i++)
                        {
                        cb=pApp->m_pIMalloc->lpVtbl->GetSize
                            (pApp->m_pIMalloc, pApp->m_rgpv[i]);

                        /*
                         * We test that the size is *at least*
                         * what we wanted.
                         */
                        fResult &= (pApp->m_rgcb[i] <= cb);
                        }

                    App_Message(pApp, fResult
                        ? TEXT("Sizes matched")
                        : TEXT("Sizes mismatch"));

                    break;


                case IDM_DIDALLOC:
                    if (!App_HaveAllocations(pApp))
                        break;

                    /*
                     * DidAlloc may return -1 if it does not know
                     * whether or not it actually allocated
                     * something.  In that case we just blindly
                     * & in a -1 with no affect.
                     */

                    fResult=(BOOL)-1;

                    for (i=0; i < CALLOCS; i++)
                        {
                        fResult &= pApp->m_pIMalloc->lpVtbl->DidAlloc
                            (pApp->m_pIMalloc, pApp->m_rgpv[i]);
                        }

                    if (0==fResult)
                        App_Message(pApp, TEXT("DidAlloc is FALSE"));

                    if (1==fResult)
                        App_Message(pApp, TEXT("DidAlloc is TRUE"));

                    if (-1==fResult)
                        App_Message(pApp, TEXT("DidAlloc is unknown"));

                    break;


                case IDM_HEAPMINIMIZE:
                    if (!App_HaveAllocator(pApp))
                        break;

                    pApp->m_pIMalloc->lpVtbl->HeapMinimize
                        (pApp->m_pIMalloc);
                    App_Message(pApp, TEXT("HeapMinimize finished"));
                    break;


                case IDM_EXIT:
                    PostMessage(hWnd, WM_CLOSE, 0, 0L);
                    break;
                }
            break;

        default:
            return (DefWindowProc(hWnd, iMsg, wParam, lParam));
        }

    return 0L;
    }





/*
 * App_Create
 * App_Destroy
 *
 * Constructor Parameters: (from WinMain)
 *  hInst           HINSTANCE of the application.
 *  hInstPrev       HINSTANCE of a previous instance.
 *  nCmdShow        UINT specifying how to show the app window.
 */

PAPP App_Create(HINSTANCE hInst, HINSTANCE hInstPrev, UINT nCmdShow)
    {
    UINT        i;
    ULONG       cb;
    PAPP        pApp;

    pApp=(PAPP)malloc(sizeof(APP));

    if (NULL==pApp)
        return NULL;

    pApp->m_hInst       =hInst;
    pApp->m_hInstPrev   =hInstPrev;
    pApp->m_nCmdShow    =nCmdShow;

    pApp->m_hWnd        =NULL;
    pApp->m_pIMalloc    =NULL;
    pApp->m_fAllocated  =FALSE;

    //100 is arbitrary.  IMalloc can handle larger.
    cb=100;

    for (i=0; i < CALLOCS; i++)
        {
        pApp->m_rgcb[i]=cb;
        pApp->m_rgpv[i]=NULL;

        cb*=2;
        }

    return pApp;
    }



void App_Destroy(PAPP pApp)
    {
    App_FreeAllocations(pApp, TRUE);
    free(pApp);
    return;
    }





/*
 * App_Init
 *
 * Purpose:
 *  Initializes an CApp object by registering window classes,
 *  creating the main window, and doing anything else prone to
 *  failure.  If this function fails the caller should insure
 *  that the destructor is called.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL App_Init(PAPP pApp)
    {
    WNDCLASS    wc;

    if (!pApp->m_hInstPrev)
        {
        wc.style          = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc    = MallocWndProc;
        wc.cbClsExtra     = 0;
        wc.cbWndExtra     = CBWNDEXTRA;
        wc.hInstance      = pApp->m_hInst;
        wc.hIcon          = LoadIcon(pApp->m_hInst, TEXT("Icon"));
        wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
        wc.lpszMenuName   = MAKEINTRESOURCE(IDR_MENU);
        wc.lpszClassName  = TEXT("MALLOC");

        if (!RegisterClass(&wc))
            return FALSE;
        }

    pApp->m_hWnd=CreateWindow(TEXT("MALLOC")
        , TEXT("C Malloc Demo"), WS_OVERLAPPEDWINDOW, 35, 35
        , 350, 250, NULL, NULL, pApp->m_hInst, pApp);

    if (NULL==pApp->m_hWnd)
        return FALSE;

    ShowWindow(pApp->m_hWnd, pApp->m_nCmdShow);
    UpdateWindow(pApp->m_hWnd);

    return TRUE;
    }




/*
 * App_GetAllocator
 *
 * Purpose:
 *  Retrieves the current allocator.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *
 * Return Value:
 *  None
 */

void App_GetAllocator(PAPP pApp)
    {
    HRESULT     hr;
    TCHAR       szTemp[80];

    //This also releases pApp->m_pIMalloc
    App_FreeAllocations(pApp, TRUE);

    hr=CoGetMalloc(MEMCTX_TASK, &pApp->m_pIMalloc);

    wsprintf(szTemp, TEXT("CoGetMalloc %s")
        , SUCCEEDED(hr) ? TEXT("succeeded") : TEXT("failed"));

    App_Message(pApp, szTemp);
    return;
    }



/*
 * App_HaveAllocator
 *
 * Purpose:
 *  Checks if there's a valid allocator and displays a
 *  message if not.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *
 * Return Value:
 *  BOOL            TRUE if there is an allocator, FALSE otherwise.
 */

BOOL App_HaveAllocator(PAPP pApp)
    {
    if (NULL==pApp->m_pIMalloc)
        {
        App_Message(pApp, TEXT("Create the allocator first"));
        return FALSE;
        }

    return TRUE;
    }




/*
 * App_DoAllocations
 *
 * Purpose:
 *  Centralized place to clean up allocations made on
 *  the current IMalloc.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *  fRelease        BOOL indicating if we're to
 *                  IMalloc::Release as well.
 *
 * Return Value:
 *  BOOL            TRUE if all allocations succeeded.
 */

BOOL App_DoAllocations(PAPP pApp, BOOL fRealloc)
    {
    UINT        i;
    ULONG       iByte;
    BOOL        fResult=TRUE;
    ULONG       cb;
    LPVOID      pv;

    if (!fRealloc)
        App_FreeAllocations(pApp, FALSE);

    for (i=0; i < CALLOCS; i++)
        {
        //cb is set in the code below for later initialization
        if (fRealloc)
            {
            pApp->m_rgcb[i]+=128;
            cb=pApp->m_rgcb[i];

            //Old memory is not freed if Realloc fails
            pv=pApp->m_pIMalloc->lpVtbl->Realloc(pApp->m_pIMalloc
                , pApp->m_rgpv[i], cb);
            }
        else
            {
            cb=pApp->m_rgcb[i];
            pv=pApp->m_pIMalloc->lpVtbl->Alloc(pApp->m_pIMalloc, cb);
            }

        pApp->m_rgpv[i]=pv;

        //Fill the memory with letters.
        if (NULL!=pv)
            {
            LPBYTE  pb=(LPBYTE)pv;

            for (iByte=0; iByte < cb; iByte++)
                *pb++=('a'+i);
            }

        fResult &= (NULL!=pv);
        }

    pApp->m_fAllocated=fResult;

    //Clean up whatever we might have allocated
    if (!fResult)
        App_FreeAllocations(pApp, FALSE);

    return fResult;
    }




/*
 * App_HaveAllocations
 *
 * Purpose:
 *  Checks if we have allocated memory from the current allocator,
 *  displaying a message if not.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *
 * Return Value:
 *  BOOL            TRUE if there are allocations, FALSE otherwise.
 */

BOOL App_HaveAllocations(PAPP pApp)
    {
    if (!App_HaveAllocator(pApp))
        return FALSE;

    if (!pApp->m_fAllocated)
        {
        App_Message(pApp, TEXT("Choose Alloc first"));
        return FALSE;
        }

    return TRUE;
    }






/*
 * App_FreeAllocations
 *
 * Purpose:
 *  Centralized place to clean up allocations made on
 *  the current IMalloc.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *  fRelease        BOOL indicating if we're to
 *                  IMalloc::Release as well.
 *
 * Return Value:
 *  None
 */

void App_FreeAllocations(PAPP pApp, BOOL fRelease)
    {
    UINT    i;

    if (NULL==pApp->m_pIMalloc)
        return;

    if (pApp->m_fAllocated)
        {
        for (i=0; i < CALLOCS; i++)
            {
            if (NULL!=pApp->m_rgpv[i])
                {
                pApp->m_pIMalloc->lpVtbl->Free(pApp->m_pIMalloc
                    , pApp->m_rgpv[i]);
                }

            pApp->m_rgpv[i]=NULL;
            }

        pApp->m_fAllocated=FALSE;
        }

    if (fRelease)
        {
        pApp->m_pIMalloc->lpVtbl->Release(pApp->m_pIMalloc);
        pApp->m_pIMalloc=NULL;
        }

    return;
    }





/*
 * App_Message
 *
 * Purpose:
 *  Displays a message in the client area of the window.  This is
 *  just to centralize the call to simpify other code.
 *
 * Parameters:
 *  pApp            PAPP identifying the object.
 *  psz             LPTSTR to the string to display.
 *
 * Return Value:
 *  None
 */

void App_Message(PAPP pApp, LPTSTR psz)
    {
    HDC     hDC;
    RECT    rc;

    hDC=GetDC(pApp->m_hWnd);
    GetClientRect(pApp->m_hWnd, &rc);

    SetBkColor(hDC, GetSysColor(COLOR_WINDOW));
    SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT));

    /*
     * We'll just be sloppy and clear the whole window as
     * well as write the string with one ExtTextOut call.
     * No word wrapping here...
     */

    ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rc, psz, lstrlen(psz), NULL);
    ReleaseDC(pApp->m_hWnd, hDC);
    return;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费精品视频| 久久综合一区二区| 99re66热这里只有精品3直播| 男人操女人的视频在线观看欧美| 亚洲最新视频在线观看| 亚洲视频精选在线| 最新高清无码专区| 依依成人精品视频| 亚洲成人先锋电影| 蜜臀av性久久久久蜜臀aⅴ流畅| 人人狠狠综合久久亚洲| 免费观看30秒视频久久| 久久国产日韩欧美精品| 国产一区二区导航在线播放| 国产ts人妖一区二区| 成人av动漫在线| 99精品视频中文字幕| 日本韩国欧美在线| 337p亚洲精品色噜噜噜| 精品国产一区二区精华| 国产蜜臀av在线一区二区三区| 国产精品美女久久久久av爽李琼| 中文字幕亚洲成人| 亚洲一卡二卡三卡四卡| 日韩国产一二三区| 国产精品一区二区在线观看网站 | 欧洲精品一区二区三区在线观看| 在线一区二区视频| 精品国产乱码久久久久久蜜臀| 欧美激情一区二区| 亚洲第一久久影院| 国产盗摄女厕一区二区三区| 一本色道亚洲精品aⅴ| 欧美久久久久免费| 日本一区二区免费在线观看视频| 亚洲老司机在线| 国产一区二区三区在线观看免费视频 | 欧美片在线播放| 久久亚洲私人国产精品va媚药| 亚洲成人激情自拍| 韩国毛片一区二区三区| 不卡一区二区在线| 欧美顶级少妇做爰| 中文字幕欧美激情一区| 亚洲综合激情小说| 国产精品羞羞答答xxdd| 欧美日韩在线播放三区| 久久精品亚洲精品国产欧美| 一区二区欧美精品| 国产福利91精品| 91精品欧美一区二区三区综合在 | 欧美网站一区二区| 欧美国产精品一区二区| 蜜桃精品在线观看| 欧美性一区二区| 色综合天天性综合| 最好看的中文字幕久久| 午夜精品久久久久久久久| 国产精品一区二区久久不卡| 欧美三级韩国三级日本三斤| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美视频在线一区二区三区 | 成人午夜激情片| 日韩美女视频在线| 亚洲免费观看在线视频| 国产精品一区二区男女羞羞无遮挡| 精品1区2区3区| 伊人婷婷欧美激情| 99精品视频在线播放观看| 欧美一级在线视频| 精品日韩欧美一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 成熟亚洲日本毛茸茸凸凹| 精品国产免费视频| 首页国产欧美久久| 欧美午夜一区二区| 亚洲午夜成aⅴ人片| 91丝袜美腿高跟国产极品老师 | 久久亚洲精华国产精华液| 午夜不卡av在线| 欧美丝袜丝交足nylons图片| 亚洲精品国产一区二区精华液| 色综合天天综合狠狠| 亚洲激情一二三区| 欧美三级午夜理伦三级中视频| 亚洲成精国产精品女| 欧美日韩国产成人在线91| 午夜久久久久久久久久一区二区| 欧美日高清视频| 久久国产福利国产秒拍| 精品国产乱码久久久久久久| 国产一区二区三区日韩| 中文久久乱码一区二区| 91亚洲国产成人精品一区二区三| 一区二区三区四区乱视频| 精品污污网站免费看| 国产精品不卡一区| 欧美性猛片xxxx免费看久爱| 日韩av中文字幕一区二区| 日韩亚洲欧美成人一区| 国产ts人妖一区二区| 亚洲综合999| 日韩欧美的一区二区| 成人久久视频在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 欧美唯美清纯偷拍| 国产精品69毛片高清亚洲| 亚洲精品久久久久久国产精华液| 91精品免费在线观看| 成人sese在线| 美腿丝袜一区二区三区| 国产精品久久毛片a| 欧美乱妇15p| eeuss鲁片一区二区三区在线观看| 亚洲香肠在线观看| 26uuu色噜噜精品一区| 欧美亚洲国产一区在线观看网站| 韩国三级电影一区二区| 亚洲免费观看高清完整版在线观看熊 | 国产精品久久久久久久久动漫| 欧美另类久久久品| 99久久精品免费看| 精品在线一区二区三区| 亚洲尤物视频在线| 中文字幕av一区二区三区| 在线成人高清不卡| 91免费在线视频观看| 美国毛片一区二区三区| 一区二区高清在线| 国产精品三级av在线播放| 欧美一区二区三区白人| 色综合久久久久网| 国内精品国产成人国产三级粉色 | 久久综合久久综合久久| 色欧美片视频在线观看| 麻豆国产精品一区二区三区| 综合自拍亚洲综合图不卡区| 久久久美女艺术照精彩视频福利播放| 欧美另类变人与禽xxxxx| 色综合天天做天天爱| heyzo一本久久综合| 国产乱一区二区| 国产综合色在线| 激情久久五月天| 免费看欧美女人艹b| 视频一区欧美精品| 亚洲图片一区二区| 亚洲精品久久久久久国产精华液| 1000部国产精品成人观看| 精品久久久久久久一区二区蜜臀| 一本大道综合伊人精品热热| 91在线观看高清| 成人白浆超碰人人人人| 国产精品1区2区3区在线观看| 精品亚洲免费视频| 日韩成人一级片| 蜜臀av国产精品久久久久| 国产精品久久久久久久久动漫| 欧美三级三级三级| 精品一区二区三区蜜桃| 日本成人在线电影网| 性感美女久久精品| 亚洲一区二区三区四区不卡| 欧美激情在线一区二区| 欧美mv日韩mv| 精品国产伦一区二区三区免费| 2020国产成人综合网| 激情五月播播久久久精品| 精品亚洲免费视频| 成人h版在线观看| 国产精品99久久久久| 国产夫妻精品视频| 91久久久免费一区二区| 欧美日韩国产综合一区二区| 欧美日韩电影在线| 奇米精品一区二区三区在线观看一| 亚洲国产电影在线观看| 欧美精品日韩综合在线| 亚洲一区二区三区在线| 欧美一区二区三区喷汁尤物| 91精品在线免费观看| 99免费精品在线观看| 91蝌蚪国产九色| 在线视频综合导航| 日本韩国精品在线| 欧美日韩国产美女| 国产欧美va欧美不卡在线| 欧美亚州韩日在线看免费版国语版| 欧洲日韩一区二区三区| 日韩一级片在线观看| 精品福利一区二区三区| 欧美精品视频www在线观看 | 91老师片黄在线观看| 91精品蜜臀在线一区尤物| 国产亚洲成年网址在线观看| 专区另类欧美日韩| 精品国产污网站| 日韩成人一级大片| 免费观看久久久4p| 成人免费不卡视频|