0

strcpy 行に到達すると、取得しています

An unhandled exception of type 'System.AccessViolationException' occurred. 
Additional information: Attempted to read or write protected memory. 
This is often an indication that other memory is corrupt.


char* str; char* out;
str = (char*) Marshal::StringToHGlobalAnsi(Parms["AVI"]).ToPointer();  
strcpy(out, str);  
Marshal::FreeHGlobal(IntPtr(str));
4

3 に答える 3

2

メモリを割り当てout、そのメモリを指す必要があります。現時点では、outランダムなメモリ位置を指しています。

于 2012-07-24T17:52:35.760 に答える
0

VisualC++でSystem::String*からChar*に変換する方法

「方法3」は非常に簡単に見えます。手動でメモリの割り当てを解除する必要はありません。

于 2012-07-24T18:14:22.873 に答える
0

str を設定した後、out にコピーする前:

char* out = (char*)malloc((strlen(str) + 1) * sizeof(char));

if (out != NULL) {
    strcpy(out, str);
}

コピー先にある種のバッファが必要なため。使い終わったら、必ず free(out) してください。

于 2012-07-24T18:00:17.740 に答える