【发布时间】:2016-07-11 08:30:46
【问题描述】:
我正在处理下面的代码,当我执行这段代码时,我得到了一个std::bad_alloc 异常:
int _tmain(int argc, _TCHAR* argv[])
{
FILE * pFile;
size_t state;
pFile = fopen("C:\\shared.tmp", "rb");
if (pFile != NULL)
{
size_t rt = fread(&state, sizeof(int), 1, pFile);
char *string = NULL;
string= new char[state + 1];
fclose(pFile);
}
return 0;
}
下面这行导致抛出异常:
string = new char[state + 1];
为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
您可以在分配前打印状态并发布结果吗?
-
调试器、断点和监视窗口可能会告诉您要分配的东西有多大。我的水晶球告诉我你的尺寸以与
size_t不一致的形式存储,但无论如何你都将它视为一个,特别是因为你正在读取int的尺寸,并存储在一个`size_t,在你的平台上可能分别是32位和64位。哎哟。 -
我也会担心字节顺序,因为这段代码直接读入整数类型的内部表示,而不是用字节构造它。 OP 可能认为他正在读取值为
0x000000FF的整数,但他可能会得到0xFF0000000! -
@HumamHelfawi - 分配前请看打印结果 - "3435973638"
-
如果我在使用前初始化 size_t state =0 对我的代码有影响吗?