小编Fav*_*ksd的帖子

CreateProcess的未处理错误

我正在阅读c ++中的CreateProcess函数,我想尝试一下.代码的基本思想是让我的主要执行另一个进程(记事本).真的,这只是基本代码.当我运行程序时,我得到:

createprocess.exe中0x752bb763处的第一次机会异常:0xC0000005:访问冲突写入位置0x00be57b8.
createprocess.exe中0x752bb763处的未处理异常:0xC0000005:访问冲突写入位置0x00be57b8.

当我为发生错误的位置设置一个断点时,我会被带到tidtable.c(我想这是用于访问线程).特别是在tidtable.c中 CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue() 我真的不知道是什么或如何避免这个问题.CreateProcess调用发生错误(即,它永远不会输出"out of create").

我的代码是:

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>
#include <conio.h>

int main(VOID)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

        //allocate memory
    ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));


fprintf(stderr, "This is just a test");

//create child process
if (!CreateProcess(NULL,
    L"C:\\Windows\\Notepad.exe",
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
{
        fprintf(stderr, "create process failed");

        return -1;
}
fprintf(stderr, "out of create");

    //parent waits for child to …
Run Code Online (Sandbox Code Playgroud)

c++ winapi createprocess unhandled-exception access-violation

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

如何计算FAT

我正在学习FAT文件系统以及如何计算FAT大小.现在,我有这个问题:

考虑磁盘大小为32 MB,块大小为1 KB.计算FAT16的大小.

现在,我知道要计算它,我们会将每个条目的位数乘以块数.因此,第一步是计算块数=(32MB)/(1KB)= 2 ^ 15 = 32 KB块.

那么,我们会把它放到第一个方程式中得到= 2 ^ 16*2 ^ 15 = 2 ^ 19现在,到此为止我理解并且我认为这就是答案(这就是我发现它的方式在http://pcnineoneone.com/howto/fat1.html中计算).

然而,我给出的答案更进一步,将2 ^ 19除以(8*1024),这基本上给出了64KB的答案.这是为什么?我搜索了几个小时,但什么都找不到.

有人可以解释为什么我们会执行将2 ^ 19除以(8*1024)的额外步骤吗?哦,另一个问题是块大小是2KB,因此它将最终结果除以(8*1024*1024)...其中8和1024来自哪里?请帮忙

fat

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

旋转前后的 OpenGL 平移

以下是关于如何绘制机器人的手臂和肩膀并通过一些用户输入旋转它们的代码(取自http://www.glprogramming.com/red/chapter03.html):

glPushMatrix();
    glTranslatef (-1.0, 0.0, 0.0);
    glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();

    glTranslatef (1.0, 0.0, 0.0);
    glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();
glPopMatrix();  

glutSwapBuffers();
Run Code Online (Sandbox Code Playgroud)

我了解绘制肩部并旋转它的代码。对于肩部:首先我们将它沿 x 轴向后平移一个单位,这样当我们进行旋转时,它会作为枢轴沿原点旋转。然后我们将其向后平移(在 x 轴上向前移动一个单位)。此转换将应用于已缩放的立方体。

现在,我的问题是肘部。为什么在旋转之前和之后在 x 轴上都有向前平移?

opengl coordinate-transformation opengl-compat

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

代码是C还是C++?

我知道下面的代码曾经是C,但是,我在visual studio 2008中将它作为一个c ++程序编写,它工作正常(它保存为C++).但是,程序是用C代码的,对吗?(或者是吗?).

所以,当我尝试在Visual Studio中将其编译为C时(转到 - >文件属性 - > c/c ++ - >高级 - >编译为 - >将其更改为'编译为C代码')然后我得到很多错误,其主要不承认LPSTR类型.所以,我想我的问题是:它是C或C++代码,如果它是C,为什么当我改变它来编译C代码时它不起作用?

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>
#include <conio.h>

int main(VOID)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    //allocate memory
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));


    //create child process
    if (!CreateProcess(NULL,
                L"C:\\Windows\\Notepad.exe",
                NULL,
                NULL,
                FALSE,
                0,
                NULL,
                NULL,
                &si,
                &pi))
    {
        fprintf(stderr, "create process failed");

        return -1;
    }

    //parent waits for child to complete
    WaitForSingleObject(pi.hProcess, INFINITE); …
Run Code Online (Sandbox Code Playgroud)

c c++ compiler-construction

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