0

我正在尝试用文件中的数据填充结构数组并使用malloc(). 数组大小约为 500,每次迭代分配的内存为 2 到 6 个字节。它在 Windows XP 上完美运行,但是当我在 Windows 7 x64 上运行它时,malloc总是在迭代 109 中返回 null。我不能用完 RAM,因为我有 8Gb。知道它可能是什么或如何解决它吗?

编辑:这是代码

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 回答