不成功的malloc?

时间:2012-05-21 02:44:37

标签: c malloc windows-7-x64

我正在尝试使用文件中的数据填充结构数组,并使用malloc()分配内存。数组大小约为500,每次迭代分配的内存为2到6个字节。它在Windows XP上完美运行,但是当我在Windows 7上运行时,x64 malloc总是在迭代109中返回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++;
}

1 个答案:

答案 0 :(得分:0)

看一下这句话:

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

由于内存和指针布局,这可能无法跨平台工作。 您可以尝试

ops=strchr(ops,','); ops++;
祝你好运