读取文件gcc版本4.4.7但不是gcc 6.1时出错

时间:2016-04-21 20:54:05

标签: c gcc

我只是尝试使用fscanf读取文件,但是当我尝试fclose()或释放char时我得到Segmentation故障*我正在写文件的内容。这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv){
    FILE *fp = fopen(argv[1],"r");
    if(fp == NULL){
        fprintf(stderr, "ERROR: File not found.\n");
        return 1;
    }
    char* directive = malloc(9);
    while(fscanf(fp,"%s",directive) != EOF){
        printf("%s\n",directive);
    }
    //fclose(fp); Seg fault
    //free(directive); free(): invalid next size (fast)
    return 0;
}

更不寻常的是,当我使用gcc版本6.1运行此代码时,我自己的计算机工作正常,但在使用gcc 4.4.7的服务器上运行它并不起作用。

编辑:这是我正在尝试阅读的文件

.byte   0000045d    00
.byte   00000457    09
.byte   00000458    09
.byte   00000141    0a
.byte   00000183    0a
.byte   000001ca    0a
.byte   0000020d    0a
.size   0800
.string "Enter new char"
.byte   00000251    0a
.byte   00000262    0a
.byte   00000263    0a
.byte   0000029d    0a
.byte   000002d3    0a
.byte   0000030c    0a
.byte   00000345    0a
.byte   00000346    0a
.byte   0000036d    0a
.byte   000003b0    0a
.byte   000003e9    0a
.byte   00000409    0a
.byte   00000442    0a

1 个答案:

答案 0 :(得分:0)

我想我已经解决了,我意识到该指令正在填充大于8个字符的值,所以我只是将fcanf行更改为:fscanf(fp,"%s\t%x\t%x",directive,&mem_location,&value) - Tom Coda