c++ - 进程返回 255 (0xff) 个代码块

标签 c++ codeblocks

<分区>

我不知道我的问题出在哪里。我试着编译一次代码,它成功了。但是,我将它复制到一个新项目中以修改它,只是颜色或等待时间,它只适用于第一个程序。 怎么了?我真的很沮丧。 使用此代码,我想绘制正弦函数的图形。 这是我的代码:

#include <stdio.h>
# include <SDL.h>
# include <math.h>
# define PI 3.141592
# define SCREEN_WIDTH 640
# define SCREEN_HEIGHT 480

int main(int argc, char **argv){

   int x,y;

   double fx,angulo;

//   Uint8* posicion;

   Uint32 color;

   SDL_Window*win = SDL_CreateWindow("y=sin(x)", 100,100, 640, 480, 0);


//   SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,"info", "Window      creada",win);

   SDL_Renderer*ren = SDL_CreateRenderer(win, -1,   SDL_RENDERER_ACCELERATED    |     SDL_RENDERER_PRESENTVSYNC);

  /* Create surface */

  SDL_Surface*surface =   SDL_CreateRGBSurface(0,SCREEN_WIDTH,SCREEN_HEIGHT,0,32,0,0,0);


  //get the pixels

  Uint32*pixels = (Uint32*)surface-> pixels;


  /* Lock the surface */

  SDL_LockSurface(surface);


   color = SDL_MapRGB(surface-> format, 255, 0, 0);

   for(x=0;x<360;x++){

      angulo=x*PI/180;

      fx=240+50*sin(angulo);

      y=round(fx);

       pixels[ ( y* surface-> w ) + x ] = color;

     }

    /* Unlock the surface */

    SDL_UnlockSurface(surface);


    //imprescindible

   SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, surface);

   SDL_RenderCopy(ren,tex,NULL,NULL);

   SDL_RenderPresent(ren);

   SDL_Delay(1000);

  return 0;

}   

最佳答案

在弄乱了你的源代码后,我对它做了一些修改,这就是我想出的,我让它编译并运行,退出 main() 时没有返回任何错误。只需确保您当前的项目或解决方案指向此 SDL 库的包含目录和静态库文件的适当包含文件,并确保您的 dll 与此项目的可执行文件位于同一目录中.还要确保您使用的是适用于 x86 或 64 位的适当构建。

#include <stdio.h>
#include <SDL.h>
#include <math.h>

const float PI 3.141592;
const int SCREEN_WIDTH 640
const int SCREEN_HEIGHT 480

int main( int argc, char **argv ) {
    int x = 0;
    int y = 0;
    double fx = 0;
    double angulo = 0;
    Uint32 color = 0;

    SDL_Window* win = nullptr;
    win = SDL_CreateWindow( "y=sin(x)", 100, 100, 640, 480, 0);

    SDL_Renderer* ren = nullptr;
    ren = SDL_CreateRenderer( win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

    SDL_Surface* surface = nullptr;
    surface = SDL_CreateRGBSurface( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0 );

    Uint32* pixels = nullptr;
    pixels = static_cast<Uint32*>( surface->pixels );

    SDL_LockSurface(surface);
    color = SDL_MapRGB( surface-> format, 255, 0, 0 );
    for( x=0; x<360; x++ ){
        angulo = x * PI / 180;
        fx = 240 + 50 * sin( angulo );
        y = static_cast<int>( round( fx ) );
        pixels[ ( y* surface-> w ) + x ] = color;
    }
        SDL_UnlockSurface( surface );

        SDL_Texture *tex = nullptr;
        tex = SDL_CreateTextureFromSurface( ren, surface );

        SDL_RenderCopy( ren, tex, NULL, NULL );
        SDL_RenderPresent( ren );
        SDL_Delay( 1000 );

        return 0;
}

我只做了一些更改,首先是我更喜欢对全局变量使用 const 值,而不是 #DEFINES。第二个是声明的任何变量,我将它们全部初始化为有效的 0 或空状态。如果您没有为指针使用 nullptr 的选项,您仍然可以使用 0 或 NULL,但首选 nullptr!这样你所有的指针都没有设置或指向内存中的任何东西。

我做的第二个改变是你接到的几个选角电话!而不是这样做:

int someInt = 10;
float someFloat = 0.0f;
someInt += (int)someFloat;

我这样做:

someInt += static_cast<int>( someFloat ); 

如果您没有使用 static_cast<>()、dynamic_cast<>()、reinterprest_cast<>() 的选项,那么您可以继续按照您正在执行的方式从一种数据类型转换为另一种数据类型。我喜欢我选择使用的转换方法有两个原因,一个是它更安全、更清晰的代码阅读,另一个是当你返回它时用户甚至你自己都可以很容易地看到你正在使用哪种类型转换!

至于你在代码中的错误,直到我在调用适当的函数之前首先将你声明的所有指针设置为 nullptr 并在你的 SDL_CreateRGBSurface() 调用你有:

 ... = SDL_CreateRGBSurface( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 32, 0, 0, 0 );

这应该是:

... = SDL_CreateRGBSurface( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0 );

发生的事情是您将位深度设置为 0,然后将 R 颜色掩码设置为 32,这对于 int 没有正确定义,因为 BitMasks 使用十六进制值而不是整数或无符号值。

这里是有关此功能的文档的链接:SDL::CreateRGBSurface

至于能否成功编译、链接和构建取决于您的操作系统、IDE 以及您如何为该库配置项目/解决方案设置!

希望对你有帮助! :)

关于c++ - 进程返回 255 (0xff) 个代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29928791/

相关文章:

c++ - 代码::阻止 'mingw32-g++.exe 的执行失败

c++ - 什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

c++ - 了解 break 语句并为现有代码处理它

c++ - C++ 中的高斯勒让德

keyboard-shortcuts - 退出代码块全屏模式

c - 如何改变c中整数中数字的位置

opencv - 为什么安装 opencv 并不容易,正如您在教程中看到的那样?

C++ 翻译单元

c++ - 如何在循环中求和正确答案的数量

c++ - 程序生成无缝分形噪声纹理