我正在尝试使用文件中的数据填充结构数组,并使用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++;
}
答案 0 :(得分:0)
看一下这句话:
ops=strchr(ops,',')+1;
由于内存和指针布局,这可能无法跨平台工作。 您可以尝试
ops=strchr(ops,','); ops++;
祝你好运