[解決済み] プロセスは255 (0xff) コードブロックを返しました [閉鎖]。
質問内容
私の問題がどこにあるのかわかりません。一度コンパイルしてみたのですが、うまくいきました。しかし、私はそれを新しいプロジェクトにコピーして、色や待ち時間を変更しようとしたのですが、最初のプログラムではうまくいきました。 どうしたのでしょうか?本当に悔しいです。 このコードで正弦関数をグラフィックしたいのです。 以下は私のコードです。
#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;
}
解決方法は?
ソースコードをいじった後、少し修正して、以下のようなものになりました。現在のプロジェクトやソリューションが、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;
}
1つ目は、グローバルには#DEFINESではなくconst値を使用するようにしたことです。もうひとつは、宣言されたすべての変数を有効な0またはNULLの状態に初期化することです。ポインターにnullptrを使用するオプションがない場合、0またはNULLを使用することもできますが、nullptrを使用することをお勧めします。こうすることで、すべてのポインタがメモリ上の何かに設定されたり、指し示されたりすることはありません。
2つ目の変更点は、キャストの呼び出しが少なかったことです。 代わりにこうしました。
int someInt = 10;
float someFloat = 0.0f;
someInt += (int)someFloat;
代わりにこうしています。
someInt += static_cast<int>( someFloat );
static_cast<>(), dynamic_cast<>(), reinterprest_cast<>() を使う選択肢がない場合は、今の方法で、あるデータ型から別のデータ型にキャストし続けることができます。1つは、より安全できれいなコードを読むことができること、もう1つは、ユーザーや自分自身でさえ、どの型のキャストを使用しているかを簡単に確認することができるためです。
コードのバグについては、あなたが宣言しているポインターをすべて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に設定したのですが、ビットマスクは16進数値を使用し、整数値や符号なし値ではないので、int型では正しく定義されていません。
この関数のドキュメントへのリンクはこちらです。 SDL::RGBSurfaceの作成
コンパイル、リンク、ビルドに成功するかどうかは、OS、IDE、プロジェクト/ソリューションの設定に依存します。
お役に立てれば幸いです。:)
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] Code::Blocksがクラッシュする :プロセスが返される (0xC0000005)
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] キャッシュフレンドリーコードとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】'std::cout'への未定義の参照