无法分配堆内存

时间:2015-04-30 19:02:45

标签: c memory

背景:我正在尝试打开一个我更改的文件,并为其所有内容保留足够的堆内存。但是,在将所有文件的内容读入堆内存之前,我很难找到程序结束的解决方案。

最好的猜测:我认为我没有在堆内存中保留足够的字节数我将指针转换为错误的类型(目前它是char类型),这可能会对我的堆内存保留方式和方式产生不利影响。

FILE *fptr3;

void highgest_and_lowest_Jan123(void)
{
int c;
unsigned int i = 0;
char *file;
long int size = 0;


fptr3 = fopen("/Users/sam/Desktop/Altered_AL_Weather_Station.txt", "r+");
if (fptr3 == 0)
{
    printf("There was an error creating the file.\n");
    exit(0);
}

fseek(fptr3, 0, SEEK_END);
size = ftell(fptr3);
file = (char *) malloc(size * sizeof(char));
if(!file)
{
    puts("Not enough memory");
    exit(1);
}

fseek(fptr3, 0, SEEK_SET);

do
{
    c = fgetc(fptr3);
    if ((int)c == EOF)
        break;
    file[i] = c;
    printf("%c", file[i]);
    i++;
} while((int)c != EOF);

// pus memory back on the heap
free(file);

}

以下是我目前的输出结果: enter image description here

但是,这是我的输出应该是: enter image description here

1 个答案:

答案 0 :(得分:0)

在大多数系统上,

var record = nlapiLoadRecord('invoice', '1393440'); var field1 = record.getField('entity'); var field2 = record.getField('trandate'); var type1 = field1.getType(); // type1 contains 'select' var type2 = field2.getType(); // type2 contains 'date' 正在扩展到EOF的值。 -1正在返回fgetc。但是你正在把它读成int变量。现在假设您的文件包含值char。在这种情况下,0xFF的字节值将为c,当转换为0xFF时,它将变为int,这是0xFFFFFFFF {{的表示形式1}}价值。然后将它与int进行比较,并且比较返回true,从而有效地停止循环。解决方案:将-1声明为EOF