以下のCプログラムを、GCCとVC9の両方を搭載したUbuntuとWindowsマシンでコンパイルして実行しようとしています。しかし、私は以下の問題に直面しています:
Ubuntuマシンの場合:
GCCは正常にコンパイルされますが、実行すると、次のプロンプトが表示されます。
Segmentation Fault (Core Dump).
Windowsマシンの場合:
VC9は正常にコンパイルおよび実行されます。GCCは正常にコンパイルされますが、プログラムが実行されるとプロセスは終了します。
ここで専門家の支援が必要です。これが私のコードです:
#include <string.h>
#include <stdio.h>
int calc_slope(int input1,int input2)
{
int sum=0;
int start=input1;
int end=input2;
int curr=start;
//some validation:
if (input1>input2)
return -1;
while(curr<=end)
{
if (curr>100)
{
char *s="";
int length;
int left;
int right;
int cent;
sprintf(s,"%d",curr);
length=strlen(s);
s++;
do
{
//printf("curr=%d char=%c pointer=%d length=%d \n",curr,*s,s,length);
left = *(s-1) - '0';
cent = *s - '0';
right = *(s+1) - '0';
//printf("curr=%d l=%d c=%d r=%d\n",curr,left,cent,right);
if ( (cent>left && cent>right) || (cent<left && cent<right) )
{
sum+=1; //we have either a maxima or a minima.
}
s++;
} while (*(s+1)!='\0');
}
curr++;
}
return sum;
}
int main()
{
printf("%d",calc_slope(1,150));
return 0;
}
更新:
エラーの追跡を助けてくれただけでなく、gccコンパイル済みプログラムのデバッグに非常に役立つバックトレースツール()を紹介してくれたEliahに感謝します。これが変更されたバージョンです、私はいくつかの試行錯誤の後に仕上げました:gdb
bt
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int calc_slope(int input1,int input2)
{
int sum=0;
int start=input1;
int end=input2;
int curr=start;
//some validation:
if (input1>input2)
return -1;
while(curr<=end)
{
if (curr>100)
{
int size=10;
char *s=(char*)malloc((size+1) * sizeof(char));
int left;
int right;
int cent;
sprintf(s,"%d",curr);
s++;
do
{
left = *(s-1) - '0';
cent = *s - '0';
right = *(s+1) - '0';
if ( (cent>left && cent>right) || (cent<left && cent<right) )
{
sum+=1; //we have either a maxima or a minima.
}
s++;
} while (*(s+1)!='\0');
}
curr++;
}
return sum;
}
int main()
{
printf("%d",calc_slope(1,150));
return 0;
}