我试图读取具有功能fscanf
的文本文件,但是每次出现“核心转储”的情况。这很奇怪,因为当我使用已经在其他地方使用的另一个文件时,代码也无法正常工作,并且我没有发现语法错误。
我的功能代码:
inst_def_t* lect_dico_int(char* nomFichierDico, int* p_nb_inst) {
/*Charge le ficheier dictionnaire nomFichierDico*/
/*Retourne un pointeur sur le tableau dictionnaire*/
/*Stocke le nb d'instructions dans *p_nb_inst*/
int i;
char s1[512];
inst_def_t *tab;
FILE* f1=open(nomFichierDico,"r");
printf("step 1 \n");
if(f1==NULL)
return NULL;
}
printf("step 2 \n");
fscanf(f1,"%d", p_nb_inst);
printf("step 3 \n");
fclose(f1);
return tab; /* here i just want to have my fscaf working not really matter of tab value */
}
我的主要代码:
int main()
{
int NbDefInstructions = 0 ;
inst_def_t* = lect_dico_int("tests/DICO_INSTRUCTION.txt",&NbDefInstructions);
return EXIT_SUCCESS;
}
结构:
typedef struct {char * symbole; char type; int nb_op ;} inst_def_t;
这是我的.txt:
4
ADD R 3
ADDI I 2
MULT R 2
DIV R 2
当我使用我的代码时,我进入了“步骤2”,但是当到达函数fscanf
时,我遇到了分段错误(内核被转储)。
我只想知道我的错误在哪里,这使我无法使用功能fscanf
。
答案 0 :(得分:1)
您正在耗尽分配的内存缓冲区:
showHideBudget: function(contentObj, modelObj){
_.each(contentObj.find('.budgetSec'), function(item){
// ===> Unable to reference modelObj here <===
budgetFlag = true;
return;
}, modelObj, this)
})
char* path2=strdup("tests/");
strcat(path,"DICO_INSTRUCTION.txt");
函数为给定的字符串分配足够的空间。然后,使用strdup
附加到该字符串时,您正在写的内容已超出分配的内存范围。这样做会调用undefined behavior,在这种情况下,它会显示为核心转储。
将完整的字符串传递给strcat
:
strdup
或者,如果第二个字符串不是常量,或者使用char* path=strdup("tests/DICO_INSTRUCTION.txt");
创建一个字符串并为其分配空间:
asprintf
您的其他问题在这里:
char *filename = "DICO_INSTRUCTION.txt";
char *path;
asprintf(&path, "tests/%s", filename);
您正在调用FILE* f1=open(nomFichierDico,"r");
,它返回一个数字文件描述符,而不是open
,后者返回一个指向fopen
对象的指针。您想要:
FILE