0

構造体の配列をファイルからのデータで埋め、メモリを。で割り当てようとしていますmalloc()。配列サイズは約500で、各反復で割り当てられるメモリは2〜6バイトです。Windows XPで完全に動作しますが、Windows 7で実行するとmalloc、反復109でx64は常にnullを返します。8Gbを取得したため、RAMを使い果たすことはできません。それが何であるか、またはそれを修正する方法について何か考えはありますか?

編集:これがコードです

typedef struct
{
    char mnemo[5];
    char *op1;
    char *op2;
    int tam;
    int codigo;
}instruction;

..。

    while(!feof(archivo))
{

    fscanf(archivo,"%s",Tabla[i].mnemo);
    fscanf(archivo,"%s",ops);
    if(strchr(ops,',')==NULL){
        Tabla[i].op1=(char *)malloc(strlen(ops)+1);
        strcpy(Tabla[i].op1,ops);
        Tabla[i].op2=NULL;
    }
    else{
        Tabla[i].op1=(char *)malloc(strchr(ops,',')-ops+1);
        strncpy(Tabla[i].op1,ops,strchr(ops,',')-ops);
        Tabla[i].op1[strchr(ops,',')-ops]=0;
        ops=strchr(ops,',')+1;
        Tabla[i].op2=(char *)malloc(strlen(ops)+1);
        strcpy(Tabla[i].op2,ops);
    }
    fscanf(archivo,"%s",codigo);
    Tabla[i].codigo=(int)strtol(codigo,NULL,2);
    fscanf(archivo,"%d",&Tabla[i].tam);
    //printf("\n%s %s %s %x %d",Tabla[i].mnemo,Tabla[i].op1,Tabla[i].op2,Tabla[i].codigo,Tabla[i].tam);
    i++;
}
4

1 に答える 1

0

この声明を見てください:

ops=strchr(ops,',')+1;

これは、メモリとポインターのレイアウトが原因で、プラットフォーム間で機能しない場合があります。あなたはそれを試すことができます

ops=strchr(ops,','); ops++;

幸運を

于 2012-05-21T12:16:57.037 に答える