行からのデータで構造体を埋めています。行の形式は 3 つの異なる形式である可能性があり
ます
。 ,B "(コンマで区切られた 2 番目の単語)。
instruccion と呼ばれる構造体には、各部分 ( mnemo
、op1
およびop2
) を指す 3 つのポインターしかありませんが、2 番目の単語にメモリを割り当てると、1 番目の単語malloc
に指定された値と同じ値が返されることがあります。mallocs
指摘されたコードは次のとおりです。
instruccion sepInst(char *linea){
instruccion nueva;
char *et;
while(linea[strlen(linea)-1]==32||linea[strlen(linea)-1]==9)//Eliminating spaces and tabs at the end of the line
linea[strlen(linea)-1]=0;
et=nextET(linea);//Save the direction of the next space or tab
if(*et==0){//If there is not, i save all in mnemo
nueva.mnemo=malloc(strlen(linea)+1);
strcpy(nueva.mnemo,linea);
nueva.op1=malloc(2);
nueva.op1[0]='k';nueva.op1[1]=0;//And set a "K" for op1
nueva.op2=NULL;
return nueva;
}
nueva.mnemo=malloc(et-linea+1);<-----------------------------------
strncpy(nueva.mnemo,linea,et-linea);
nueva.mnemo[et-linea]=0;printf("\nj%xj",nueva.mnemo);
linea=et;
while(*linea==9||*linea==32)//Move pointer to the second word
linea++;
if(strchr(linea,',')==NULL){//Check if there is a coma
nueva.op1=malloc(strlen(linea)+1);//Do this if there wasn't any coma
strcpy(nueva.op1,linea);
nueva.op2=NULL;
}
else{//Do this if there was a coma
nueva.op1=malloc(strchr(linea,',')-linea+1);<----------------------------------
strncpy(nueva.op1,linea,strchr(linea,',')-linea);
nueva.op1[strchr(linea,',')-linea]=0;
linea=strchr(linea,',')+1;
nueva.op2=malloc(strlen(linea)+1);
strcpy(nueva.op2,linea);printf("\n2j%xj2",nueva.op2);
}
return nueva;
}
ポインターを印刷すると、たまたま同じ数になります。注: 関数 char *nextET(char *line) は、行の最初のスペースまたはタブの方向を返します。ない場合は、行末の方向を返します。
sepInst()
プログラムで数回呼び出され、数回呼び出された後にのみ失敗し始めます。mallocs
私のプログラム全体でこれらは私にそのような頭痛の種を与えています。