【发布时间】:2009-06-05 09:13:15
【问题描述】:
我在下面有这段代码 sn-p,它在“str”中的分配过程中崩溃,这是一种动态分配。
char *str;
int file_size;
FILE *fptr;
if (!(fptr = fopen(filename, "r"))) goto error1;
if ((fseek(fptr, 0L, SEEK_END) != 0)) goto error2;
if (!(file_size=ftell(fptr))) goto error2;
if ((fseek(fptr, 0L, SEEK_SET) != 0)) goto error2;
str = (char*)malloc(file_size+1);
if (fread(str, file_size, 1, fptr) != 1) {
free(str);
goto error2;
}
str[file_size] = '\0';
fclose(fptr);
file_size 是非零、非负小于 140 的值
我正在使用 ARM。这实际上适用于我的英特尔电脑,但不适用于 arm 机器。
【问题讨论】:
-
分配前file_size给你什么?
-
它是一个非零、非负值。
-
这也可能对您有所帮助:xkcd.com/292
-
你可以在 malloc 赋值时将强制转换为 (char *),它在 c 上是自动的(但不是在所有 c++ 编译器中)