

下記のような初期化した行列と列ベクトルをdatファイルに保存するプログラムを描いたのですが、実際にこのコードを実行しても機能してくれません。ですがなぜか

[code]

    init(m * n, 1, A);
    
[/code]

の前に

[code]

    printf("%d", m);
    
[/code]

と入れるとうまく機能します。これは何故なのでしょうか？[![上から2行が失敗例で最後が成功例です。](https://i.stack.imgur.com/4Jbqc.png)](https://i.stack.imgur.com/4Jbqc.png)

[code]

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    void init(int n, float x, float * o) {
        for(int i = 0; i < n; i++) {
            o[i] = x;
        }
    }
    
    void print(int m, int n, const float * x) {
        for(int i = 0; i < m ; i++){
            for(int j = 0; j < n; j++){
                printf("%.4f ", x[j + i * n]);
            }
            printf("\n");
        }
    }
    
    void save(const char *filename, int m, int n, const float *A, const float*b){
    
        FILE *fp;
        if((fp = fopen(filename,"wb"))==NULL){
            printf("\aファイルをオープンできません。\n");
        } else {
            fwrite(A, sizeof(float), m * n, fp);
            fwrite(b, sizeof(float), n, fp);
            fclose(fp);
        }
    }
    
    int main(int argc, char *argv[]){
        int m = 0;
        int n = 0;
        float *A = malloc( sizeof(float) * (m*n));
        float *b = malloc( sizeof(float) * n);
        m = atoi(argv[1]);
        n = atoi(argv[2]);
    
        init(m * n, 1, A);
        init(n, 2, b);
        print(m, n, A);
        print(1, n, b);
        save("test.dat", m, n, A, b);
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-06-23T17:52:47.410
56040
2019-06-23T17:52:47.410
34332
question
c
行列をdatファイルに保存する関数について