私が持っている興味深いバグを報告したいと思います。以下のコードは、「1.0」を 20 回出力することになっています。代わりに、私の Mac (snow leopard 10.6.8) で icc (11.1) を使用してコンパイルすると、不安定な値 (「0.0」の 16 倍、次に「1.0」の 4 倍) が得られます。コードでいくつかの機能を使用していますが、構文が悪いものはないようです (コンパイル中にエラーは発生せず、valgrind は実行中にエラーを報告しません)。ただし、何かを変更すると(使用されていない関数であっても、非常に奇妙に感じるのはそのためです)、正しい出力が得られます。gcc でコンパイルすると、正しい出力も得られます。
しかし、最も奇妙なことは、関数「function1」を削除すると、関数がコードで使用されていないにもかかわらず、バグが消えることです。
これは本当に奇妙で、コード (それよりもはるかに大きい) が不安定になるのではないかと心配しています。私はあなたの助けが必要です、私はこれに本当に困惑しています. 構文に何か問題がありますか?
main.c:
#include "main.h"
int main(argc,argv)
int argc;
char **argv;
{
Config para;
para.option1 = ONE;
para.a[0] = 0.0;
para.a[1] = 0.0;
para.a[2] = 0.0;
para.a[3] = 1.0;
int i;
double *x = (double *)malloc(20*sizeof(double));
for(i=0;i<20;i++) x[i] = 1.0;
for(i=0;i<20;i++) printf("%f \n", x[i]);
free(x);
function2(para);
return EXIT_SUCCESS;
}
void function1(int option){
switch(option){
case ONE: case TWO: case THREE: case MONE:
printf("MONE to THREE\n");
break;
case FOUR:
printf("FOUR\n");
break;
}
return;
}
void function2(const Config para){
if(para.option1 == FOUR){
printf("FOUR\n");
}
return;
}
main.h:
#include <string.h>
#include <stdio.h>
#include <stddef.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <stdarg.h>
#define MONE -1
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
typedef struct Config
{
int option1, option2;
double a[4];
} Config;
void function1(int option);
void function2(const Config para);