写文件过程崩溃!关闭
Crash on write file procedure !closed
我编写了一个过程,必须将 2D 数组写入文件。代码如下:
void Level::loadLevel(){
int levelmap[15][9];
FILE *fp = fopen("resources/lvls/loc1.map", "wb");
for (int i=0;i<=15;i++){
for(int j=0;j<=9;j++){
levelmap[i][j]=i+j;
}
}
char asd[255];
for (int i=0;i<=15;i++){
for(int j=0;j<=9;j++){
char *buffer=itoa(levelmap[i][j],asd,1);
fwrite(buffer,2,sizeof(buffer),fp);
};
};
fclose(fp);
}
它正在编译,但在调用此函数时应用程序崩溃。 我将其称为Cocs2D-X菜单项menu_selector
属性。为什么会崩溃?
更新:更改为文件流广告效果很好
不仅是上面提到的错误...
-
确保您的文件夹"resources/lvls/"确实存在。 fopen 不创建文件夹!
-
ITOA 的第三个参数 - 基数(值的基数;必须在 2-36 范围内。
-
你真的想把它写成二进制格式的 int 的字符串表示吗?打开文件进行二进制输出意味着您将在那里写入原始数据。您可以使用下一个代码将 int 数组保存并加载到/从文件加载:
'
void saveLevel()
{
int levelmap[15][9];
FILE *fp = fopen("loc1.map", "wb");
for (int i=0;i<15;i++){
for(int j=0;j<9;j++){
levelmap[i][j]=i+j;
}
}
for (int i=0;i<15;i++){
fwrite(levelmap[i], sizeof(int), _countof(levelmap[i]), fp);
};
fclose(fp);
}
void loadLevel()
{
int levelmap[15][9];
FILE *fp = fopen("loc1.map", "rb");
for (int i=0;i<15;i++){
fread(levelmap[i], sizeof(int), _countof(levelmap[i]), fp);
};
fclose(fp);
}
'
你在几个地方超出了数组边界,所以你正在破坏内存。 例如:
int levelmap[15][9];
// ^^ ^
// ...
for (int i=0;i<=15;i++){
// ^^^^
for(int j=0;j<=9;j++){
^^^
levelmap[i][j]=i+j;
}
}
在数组索引的for
循环条件中使用<=
是一个危险信号。这几乎总是错误的做法,因此请在看到代码时仔细检查代码。
也:
char *buffer= /* ... */;
// ...
fwrite(buffer,2,sizeof(buffer),fp);
不执行您认为它所做的事情,因为sizeof(buffer)
是指针的大小,与缓冲区中的字符数无关。 为什么要传递2
作为元素的大小来fwrite()
?
char *buffer=itoa(levelmap[i][j],asd,1);
itoa 的最后一个参数是 base。它应该是 10 而不是 1(见 http://www.cplusplus.com/reference/cstdlib/itoa/)
<小时 />void Level::loadLevel(){
int levelmap[15][9];
FILE *fp = fopen("resources/lvls/loc1.map", "wb");
for (int i=0;i<=15;i++){
for(int j=0;j<=9;j++){
levelmap[i][j]=i+j;
}
}
如果 i == 15 且 j == 9,则超出数组的边界(levelmap[15][9] 表示 levelmap[0..14][0..8])
将循环中的条件更改为 i <15 和 j <9。
相关文章:
- omnet++ 模拟在节点关闭时崩溃
- 如何在程序崩溃时关闭程序,没有任何警告屏幕等.C++窗口
- 如果子进程关闭或崩溃,则关闭父进程
- 在我关闭刚开始的孩子对话框并进入父母对话框之后,我的QT桌面应用程序不断崩溃
- nofify_all()关闭程序时会崩溃
- 如何停止C 程序在等待条件时关闭时崩溃
- log4clus:在Logger:上崩溃:在Windows上关闭
- 写文件过程崩溃!关闭
- 如何检测终止进程事件、计算机关闭和计算机崩溃
- QTCPSERVER在关闭时崩溃
- Qt在创建c++注册的QAbstractListModels后关闭时崩溃
- 程序在Qt中关闭事件时崩溃
- 关闭康科尔窗口会导致崩溃
- Qt5应用程序关闭时崩溃(QWidget::show)
- wxWidgets程序在框架关闭时崩溃
- 无法关闭QThread-应用程序崩溃
- Ofstream关闭崩溃程序
- 我的质数生成器崩溃了,被Windows 10关闭了
- SDL程序在关闭时崩溃-c0000005
- MetaTrader4在WinXP模式虚拟PC上的deinit()+dll线程关闭(崩溃?)