これからの季節に親子でハイキング! >>

32bitマシンで使っていたソースを、64bit化する際に
気をつけたこと、困った経験などがありましたら、教えて下さい。

どういったことが問題になるのか、勘所がわからないので、
勉強の為に質問させていただきました。
具体例なんかあると嬉しいです。
よろしくお願いします。

A 回答 (5件)

#3です。


>tatsu99さんは、64bit対応の際に、まずそれぞれの型のバイト長を
>調べて、2.long型を使用しないとされたんでしょうか。
その通りです。プログラマたるもの、そのぐらいは常識です。
マニュアルで調べ、かつ全ての型を、
printf("charのサイズ=%d",sizeof(char));
printf("char*のサイズ=%d",sizeof(char*));
printf("intのサイズ=%d",sizeof(int));
のようにして調べて下さい。
その結果、long型が32ビットと64ビットで異なるため通常は使用しないようにしました。

>私はintを使わないようにと言われたことがあります。
>なぜなのかよくわかってないので、
int型は、かつての古きよき時代(MS-DOSの時代)には2バイトでした。そのため、int型は、OSによりサイズが異なると思っている人が多いです。そのために、上記のことをいわれたのかと思います。この認識は、正しい場合もあり、そうでない場合もあります。(HP-UX,solarisでは正しくありません)
どのOS(又はコンパイラ)で、64ビットにするかは、わかりませんが、それが、明確になったとき、全ての型のサイズを自分で調べることが、大切です。
    • good
    • 1
この回答へのお礼

重ね重ねアドバイスありがとうございます。
32bit, 64bitマシン・RedHatLinux(gcc)で表示させたところ、
以下のようになりました。

32bit環境:
char size = 1
short size = 2
int size = 4
long size = 4

64bit環境:
char size = 1
short size = 2
int size = 4
long size = 8

64bit環境ではlong型が8バイトになっています。
int型はCPUビット数の大きさなのかと思っていたのですが、
これは少なくとも現在のRedHatLinux(gcc)では成立しないのですね。
とするとTacosanさんにご指摘いただいた、int型は4バイト、という
勘違いをしてしまいそうです。

なんだか、型名っていったい何、、
プログラム書くときに、どれを使ったらいいの、、
などなど、また新たな迷宮の入り口に立ったような気がいたしますが(苦笑)
意識しながら勉強を続けていこうと思います。ありがとうございました。

お礼日時:2007/01/17 10:24

まあ, 重要なのは「この型なら大きさはこれだけ」という仮定をおかないってことでしょうか. もっとも, 規格を作る方も「全然仮定できないとどうにもならない」ってことは理解したらしく, 今の ANSI C では「そこそこの仮定」を許すためのヘッダとして stdint.h が用意されています.


ちなみに 64ビット化に関しては LP64, ILP64, LLP64 なんて表現があって
LP64: int = 32ビット, long = 64ビット
ILP64: int = long = 64ビット
LLP64: int = long = 32ビット, long long = 64ビット
だったような気がします. なので, 厳密には「long を使わなければ安全」でもない. もっというと sizeof(long long) = 1 かもしれないんですが, まあそんな環境は現れないと思いたい (苦笑).
で, #2 で言ってるのは「sizeof(int) = 4 を仮定するコード」(つまり sizeof(int) を使わずリテラルの 4 をそのまま使うコード) はしばしばあったりするんだけど同様に「sizeof(void*) = 4 を仮定する」あるいは「sizeof(void*) = sizeof(int) を仮定する」コードもある, って話. 今どきのコードではどうか知りませんが, ちょっと古いコードだと結果的にこのような仮定ができてしまって「コンパイルできね~」とか悩むことになったりします, というか実際悩みました.
    • good
    • 0
この回答へのお礼

size(long long)=1ですか、それはさすがにない…でしょうね(笑)
LP64,ILP64, LLP64は初めて聞いたキーワードだったので、
ぐぐって調べさせていただきました。ありがとうございます。
そして、以下のページに行き着きました。
誰かの役に立つかもしれないので、一応貼っておきます。
ご回答ありがとうございました。
http://www.itmedia.co.jp/enterprise/articles/050 …

お礼日時:2007/01/18 18:46

HPとsolarisで64ビット化を行った時の経験です。


int型は4バイトのままです。long型が32ビットと64ビットで異なります。
また、ポインターのsizeが異なります。
まとめると、以下のようになります。
       32ビット  64ビット
char      1バイト   1バイト
short     2バイト   2バイト
int      4バイト   4バイト
long     4バイト   8バイト
long long int 8バイト   8バイト
ポインター   4バイト   8バイト
32ビットへの移植を考慮した場合、以下の点がポイントになります。
1.ポインターのサイズを4バイトと決めつけない
2.long型を使用しない
3.8バイト整数は、longではなくlong long intを使う
4.OSから提供されるシステムコールのパラメータについては、
その型をそのまま使う。
size_t,time_t,pid_t等(これらは、最終的にはlong型にたどり着く可能性がありますので、int型で代用すると、痛い目に合います。)
size_t,time_t等は、32ビットか64ビットかにより、サイズが異なる可能性があります。(実際、solarisでは異なっていました)
従って、本来time_tを使うべきところで、intを使っていると64ビット化したとき、バグを誘発する可能性があります。

LINUX,windowsでの64ビット化は、やったことがないので、上記が当てはまるかどうかは、不明です。
上記の前提が、あてはまるとすれば、
32ビットのソースで、下記の点が、あるかどうかをチェックした方が良いでしょう。
1.ポインターを4バイトに決めつけているソースがないか。
2.time()の戻り値はtime_t型で受けるべきであるが、intで受けてないか等。一般的には、システムコールの本来の型で受けるべきものを、intで受けてないか。
    • good
    • 1
この回答へのお礼

long long intというのは知りませんでした。
tatsu99さんは、64bit対応の際に、まずそれぞれの型のバイト長を
調べて、2.long型を使用しないとされたんでしょうか。
私はintを使わないようにと言われたことがあります。
なぜなのかよくわかってないので、それも調べて勉強してみます。
ご回答ありがとうございました。

お礼日時:2007/01/17 00:37

sizeof(void*) = sizeof(int) = 4 を仮定してるコードが意外とあるので注意.

この回答への補足

もうちょっと考えました。
たとえばポインタを格納する配列を作るのに、
int* pContainer = (int *)malloc(4*1000);
なんてことをしているプログラムがあるってことでしょうか。
確かにありそうですね。

補足日時:2007/01/17 00:48
    • good
    • 0
この回答へのお礼

ええっと、むむ、私には理解できませんでした。。
sizeofを使っているのに、sizeof(int)=4と仮定するというのは、どういうことですか?

お礼日時:2007/01/17 00:31

I/Oを叩いているなどメモリのリソース管理をしている場合は今までなかった上位32ビットを0で埋めておかないと、32ビットアプリを64ビットOSで動かすと管理しきれなくなるというのが考えられます。



通常のアプリケーションをCライブラリを用いて64ビット用オプション付きで再コンパイルする分には(コンパイラの文法が改訂になった場合を除いて)あまり気にする部分は無いと思われます。

intの長さが32ビットから64ビットに変更になっている場合はキャストやシフト演算の互換性に注意がいるとおもわれます。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
I/Oを叩くというのが、いまいちピンとこないのですが、メモリのリソース管理はアドレス値を扱っているので、32→64bit化するときには、その辺りの対応が必要ということでしょうか。
すいません、I/Oポートを操作したことがないので、具体的にイメージできていませんが。。

お礼日時:2007/01/17 00:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアプリを32bitから64bit移行

いまさら、のしつこいような質問で゛申し訳ありません。

今だによくわかっていないので、教えてください。

今、64bitのwindowsのwowで動いている32bitアプリを純粋に!?
64bit上で動かすにはどうしたらよいか、、、
コンパイラーを64bit版にする程度しか、わかりません。

ソースコード的にどれ(データ型?、関数?)をどのように直せばいいのか、
探すのは得意なほうだと思っているのですが、なかなか見つかりません。

下記の情報はあってるでしょうか?

int
CString
time_t
などが変更必要?という情報は見つけましたが、(あってますか?)



int → long? 、 printf()では %d → %ld? 
CString → リコンパイルだけでよい?
time_t → 使ってますがソースコード的にどう変更したらよい?


他にもいろいろあると思うのですが
対象のアプリがかなり旧いので(VisualStudio6.0 c++)、よけい探せないのかも知れません。

VisualStudioも64bit対応用に新しく買ってもらわないといけないと思うのですが
はたして使いこなせるか。(これは別問題ですね)


修正規模を出せと言われてるのですが、
どう返事をしたら良いものか、

どうかアドバイスをお願いいたします。

いまさら、のしつこいような質問で゛申し訳ありません。

今だによくわかっていないので、教えてください。

今、64bitのwindowsのwowで動いている32bitアプリを純粋に!?
64bit上で動かすにはどうしたらよいか、、、
コンパイラーを64bit版にする程度しか、わかりません。

ソースコード的にどれ(データ型?、関数?)をどのように直せばいいのか、
探すのは得意なほうだと思っているのですが、なかなか見つかりません。

下記の情報はあってるでしょうか?

int
CString
time_t
などが変更必要?という情報は見...続きを読む

Aベストアンサー

>もしかして何もしなくていいのかな、、、というところです。
>ホントですかね???

Windows の場合は、アプリでは何もしなくてよいことも多いですよ。

ただし、Windows では整数型のサイズが変わらないので、
動きますけど、32ビットの制限がそのまま残ったりします。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

Qintとlongは同じ?

#include <stdio.h>
#include <limits.h>

int main() {
printf("%d\n%d", INT_MAX, LONG_MAX);
return 0;
}

出力
214783647
214783647

Win7 64bit (VC++2010)
CentOS 32bit (gcc)

どちらの環境でも同じ出力結果となりました。
intとlongなぜ同じになってしまったのでしょうか。

Aベストアンサー

long は 32ビットの整数(signedの場合 -2147483648~+2147483647、unsignedの場合
0~4294967295)
int は システムにおける 標準
という定義です。

32ビットシステムの場合は同じになります。

DOS時代はシステムが 16ビットのため、intは -32768~+32767(または 0~65535)でした。

short int とすることで 16ビット互換となります。

Qunsigned long long 型のフォーマット指定子

unsigned long long 型の変数の値を表示したいのですが、
フォーマット指定子は%ldですか?
よろしくおねがいします。

Aベストアンサー

規格上は、%llu のように ll を付けます。(unsigned long longなので、%lld ではなく %llu です。)
ただし、C99に準拠した処理系ではなく、単に独自拡張としてlong long型をサポートしている場合には、%Lu とか %qu とかになる場合もあります。場合によっては、long long型が存在する処理系でも、printf系関数で正しく書式化する方法が存在しないこともあり得ます。

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Qセマフォとmutexの違いは?

排他制御としてセマフォとmutexがありますが、
この二つの違いがよくわかりません。
自分で調べてみたところ、
・セマフォ…プロセス間排他制御。複数ロックがかけられる。
・mutex…スレッド間排他制御。ロックは一つだけ。

と言うような違いがあるようなのですが、これだけの差なんでしょうか?
(これだけの差、と言ってる時点で筋違いだったら申し訳ありません)
また、セマフォをスレッド間排他制御に用いたり、
mutexをプロセス間排他制御に用いることは可能なのでしょうか?
可能だとしたら、これらが2種類存在する理由も教えていただきたいです。

Aベストアンサー

> >一般論としては、Mutexは「カウントを1に限定した」特殊化したSemaphoreです。
> とのことですが、これはWin32以外の環境だと
> これ以上の違いはないと言うことでしょうか?

「一般論」と書いた意味を取り落とされているのではないかと思います。

「一般論としては〇〇」なのですから、「Win32以外の環境」も含めて「各論」では「必ずしも〇〇とは限らない」とご理解ください。

なお、ご指摘のとおり、あるリソースを排他的に利用するだけであればMutexを使用するかわりにカウントが1のSemaphoreを使用することができます。(特定の環境での、MutexとSemaphoreの環境依存の動作を除けば、ですが。)

ではなぜ2種類が用意されている(用意されている環境が存在する)のかといえば、リソースの排他的利用は非常によくあることなので、これに特化した機能を用意すればより良いであろう、というシステムデザイナの判断によるものと考えられます。

ここで言う「より良い」は、あるデザイナにとっては「便利性」、また別のデザイナにとっては「消費リソースが少ない」と、これまた考え方はいろいろでしょう。

> >一般論としては、Mutexは「カウントを1に限定した」特殊化したSemaphoreです。
> とのことですが、これはWin32以外の環境だと
> これ以上の違いはないと言うことでしょうか?

「一般論」と書いた意味を取り落とされているのではないかと思います。

「一般論としては〇〇」なのですから、「Win32以外の環境」も含めて「各論」では「必ずしも〇〇とは限らない」とご理解ください。

なお、ご指摘のとおり、あるリソースを排他的に利用するだけであればMutexを使用するかわりにカウントが1のSemaphore...続きを読む

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

Q変数の型でlong longとunsigned long longと言うのは何ですか?

教えていただきたいのですが、変数の型にlong longやunsigned long long
なるものがあると聞いたのですが、どのようなものでしょうか?
また、どのように宣言するのでしょうか?通常のlongなどと同じ要領で宣言し
てやれば良いのでしょうか?
もし、この型がある場合に、制約はあるのでしょうか?Unixでしか使えないとか
の制約等ありましたらぜひ教えてください。
お願いいたします。

Aベストアンサー

long longはANSI-Cの新しい改訂版C99で正式に採用されました。
C99以前のANSI-C対応処理系では独自拡張(gccなど)です。
環境の指定が無いので独自拡張は無視してANS-C99について解答します。

long longまたはlong long int=64ビット符号付き整数
unsigned long longまたはunsigned long long int=64ビット符号無し整数

定数の場合はLL(=long long)またはLLU(=unsigned long long)を付加する。
LL,LLU小文字でもよい。
1LL,0LL,100000000000lluなど

long long系の整数使うライブラリ関数について
・printf/scanf系書式の追加
%lld(=long long) および%llu(=unsigned long long)
・その他ライブラリ関数
文字列整数化:strtollが用意される。

現状では日本語で読めるC99の包括的な資料は存在しません。
英語版で良ければC99のドラフトが参考URLで読むことができます。

参考URL:http://anubis.dkuug.dk/JTC1/SC22/WG14/

long longはANSI-Cの新しい改訂版C99で正式に採用されました。
C99以前のANSI-C対応処理系では独自拡張(gccなど)です。
環境の指定が無いので独自拡張は無視してANS-C99について解答します。

long longまたはlong long int=64ビット符号付き整数
unsigned long longまたはunsigned long long int=64ビット符号無し整数

定数の場合はLL(=long long)またはLLU(=unsigned long long)を付加する。
LL,LLU小文字でもよい。
1LL,0LL,100000000000lluなど

long long系の整数使うライブラリ関数について
・...続きを読む

Q64ビットと32ビットの違い

C言語を使っているのですが、32ビット版のgccでコンパイルして実行できるファイルが、64ビット版のgccだと違う結果が出てきます。どちらのgccでも使える汎用性のあるファイルは書けないのでしょうか?
因みにstdio.h、math.h、stdlib.hのライブラリを使っていて、倍精度(double)と整数(int)を使っています。配列は宣言時に「*a」とでも宣言して、mallocで作っています。
漠然とした質問ですがよろしくお願いします。

Aベストアンサー

ごめ、ソースみてわかる世界じゃないや(笑
むしろ、書いた人すごいなぁ。

LinuxならGDBが動くはずなので
地道にトレースして値のおかしくなる場所を特定して
その結果から推測するしかないですね。

google検索したら日本語マニュアルあったのでぺたり
GDB マニュアル
http://flex.ee.uec.ac.jp/texi/gdb-j/gdb-j_toc.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング