-1

問題の原因となっているコード行は

char command_tb_temp[][1000]={"gcc -Wall ","-o3 -ftree-ccp -fno-align-jumps "," Scripts/*.c -o output -lm && time -f \"%e\" -o TB.log ./output 1.dat"};

以下のように、最適化オプションを 1 つだけ指定して同じコードを記述した場合、エラーは返されません。

char command_tb_temp[][1000]={"gcc -Wall ","-o3 -ftree-ccp "," Scripts/*.c -o output -lm && time -f \"%e\" -o TB.log ./output 1.dat"};

この問題の解決を手伝ってください。どんな助けでも大歓迎です。ありがとうございました。

機能全体はこちら..

int findtb(int flag)
{   
printf("debug -1-1-1");
char command_tb_temp[][1000]={"gcc -Wall ","-o3 -ftree-ccp -fno-align-jumps "," Scripts/*.c -o output -lm && time -f \"%e\" -o TB.log ./output 1.dat"};

char command_tb[]="",line[100];

if(var[initial].exetime>0.00&&flag==1)
{   
    if(var[initial].rip<0.00)
        strcat(finalop,var[initial].name);
    else
        return 0;
}

strcpy(command_tb_temp[1],finalop);
//strcat(command_tb_temp[1]," -ftree-ccp ");        
for(int i=0;i<3;i++)
    strcat(command_tb,command_tb_temp[i]);  
printf("***** %s ****",command_tb);

system(command_tb);     
fp=fopen("TB.log","r");
fscanf(fp,"%s",line);   
tb=atof(line);
printf("\nTb=%f\n",tb); 
fclose(fp);
return 1;

}

エラーは...

*** stack smashing detected ***: ./3 terminated
4

1 に答える 1

3

char command_tb[] = ""サイズ1の文字配列を定義し、終了ヌル文字のみを含みます。
strcat(command_tb,command_tb_temp[i]);次に、それにデータを書き込みます。
ただし、保持できるよりも多くのデータを書き込むため、メモリの他の部分が破損します。

十分に大きくする必要があります。

また、バッファを簡単に超えてしまう可能性があるためstrcat、、を使用しないことをお勧めします。バッファサイズを取得し、それ以上書き込みを行わない他の場所でstrcpy使用することをお勧めします。strncpy適切なサイズを提供するのはあなたの責任です。
ただし、注意してくださいstrncat。サイズパラメータの意味は誤解を招く可能性があるため、ドキュメントを注意深く読むか、使用しないでください。

于 2012-01-08T21:38:46.497 に答える