EDIT:nvccがmalloc(3)をキャストしていないときにエラーが発生したためにCコンパイラの代わりにC++コンパイラを呼び出すため、 char *を呼び出します。私はこのアサーションに導かれています。Invalid converstion from void* to char**nvccを使用しているときに書き込み可能なファイルを開くことができません
EDITEDIT:fileO = fopen(version、 "w")を使用するとうまく動作します。 strcpyとstrcatの呼び出しをバイパスします。 (ハハ、私はcatcalls ...)
私は同じプログラム(非CUDA)のシーケンシャルバージョンからいくつかのファイルI/Oを収穫したCUDAプログラムがあります。まったく同じコードは、通常のgccコンパイルでは動作しますが、nvccでは動作しません。私は、ネイティブなC++コンパイラにnvccがC/C++をシャントすることを知っていますが、なんらかの理由で書き込み可能なファイルを開いていないだけです。上記のコードでデータを読み込むために別のファイルストリームを開いたり閉じたりしましたが、私はこれを私のシーケンシャルバージョンで行い、そこではうまくいきます。私は毎回「ファイルの作成に失敗した書き込み」を取得
else
{
char* version = "matrixExpCUDAx";
char* filename = (char *)malloc(strlen(version) + strlen(argv[3]));
strcpy(filename, version);
strcat(filename, argv[3]);
FILE *fileO;
fileO = fopen(filename, "w");
if(DEBUG)
{
for (i=0; i<(dim*dim); i++) fprintf(stderr, "%f\n", h_O[i]);
}
else
{
if(fileO != NULL)
{
for (i=0; i<(dim*dim); i++)
{
fprintf(fileO, "%f\n", h_O[i]);
}
fclose(fileO);
}
else fprintf(stderr, "Write file failed to create\n");
}
}
....
:
はここに関連するコードです。
アイデア?
トップの近くで失敗したコードの書式に注意してください。それを修正できますか? (他の人もそれを修正することができますが、同時に複数の人が投稿を編集しようとすると、誰かにとって迷惑になります..) – sarnold
'nvcc'はコンパイラではなく、このコードをコンパイルしませんでした。あなたの標準的なホストC++コンパイラ(タグの外観による 'gcc')はそうでした。外見にもかかわらず、この質問はCUDAやCUDAツールチェーンとは関係がありません.Cの文字列終了については理解していません。 – talonmies
@talonmies:ありがとうございます。私は、nvccが元の投稿でシステムCコンパイラを使用していることに注意しました。私はコードのCUDA固有の部分とコンパイラとしてのgccなしで動作するので、文字列終了とは思わない。ちょっとでもそれを見ていきます。 –