statsStructのデータは、プログラムがメインの1行目から開始した最初の2秒で破損します。なぜ、statsStructをグローバルとして宣言しようとすると、このようになるのかわかりません。編集:これは、値がすべてstatsstructで混乱し、テキストが破損し、値が323232であるだけでコンパイルされます
extern attributes statsStruct[];
statsStructは複数のcppのヘッダーファイルのexternですが、IvはstatsSTructだけが残るまですべてのソースコードを削除しましたが、グローバルにすることはできません。関数内で宣言すると、適切な値で機能しますが、複数のファイル間でグローバルに使用し、同じ値を共有する必要があります。
// tess.cpp : main project file.
#include "stdafx.h"
#include "Form1.h"
#include "test.h"
using namespace tess;
struct attributes{
std::string stat;
int amount;
};
attributes statsStruct[] = {{"Acc",0},
{"Cri",0},
{"Cr",0},
{"Crit",0},
{"Cr",0},
{"Ev",0},
{"An",0}};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
Application::Run(gcnew Form1());
return 0;
}
偶然ではなく、これを再現したと思います。これは、プロジェクトのコンパイラ設定が原因で発生します。これを修正するには、[ソリューションエクスプローラー]ウィンドウの[プロパティ]、[全般]でプロジェクトを右クリックします。共通言語ランタイムのサポート設定をから/clr:pure
に変更します/clr
説明に少し手を振る必要があります。/ clr:pureが有効な場合、コンパイラーは純粋なILのみを生成でき、マシンコードは生成できません。問題は、CLRがグローバル変数をサポートしていないことです。コンパイラーは、アンマネージ配列であるattributes []配列をエミュレートし、適切に初期化するために、いくつかのスタントをプルする必要があります。これはデバッガーを混乱させるのに十分であるように見えます。実際のstatsArrayデータの代わりに「statsArray」のシムに移動します。確かに、配列要素にゴミが表示されます。追加のポインター逆参照が必要であり、一部のデバッガーはこれを忘れます。
/clr
アンマネージ宣言を使用する場合は、常に有効にコンパイルしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加