fopen-mlock访问违规
fopen mlock access violation
本文关键字:访问 fopen-mlock 更新时间:2023-10-16
对于以下方法,我反复得到相同的错误异常。AST.exe中0x77a8f4e1处未处理的异常:0xC0000005:读取位置0x29919ed9时发生访问冲突。
bool package::write(char * buf, size_t size, const char *fname)
{
//makeDir(fname);
FILE * output = fopen(fname, "wb");//break point
if (output == NULL)//break point
{
perror("ERROR: ");
return false;
}
fwrite(buf, size, sizeof(char), output);
fclose(output);
return true;
}
这与fopen有关,我知道这是因为断点。但无论我做什么,它只有在使用四次时才会出现异常。我反复更改了fname,但第四次使用时它总是崩溃。由于某种原因,在我点击"中断"后,我最终到达了mlock.c 的第345行
如果能帮我解决这个令人头疼的错误,我将不胜感激。
这里有一个用C编写的简单完整的例子,可以简单地转换为C++,展示了编写函数的正确方法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int write( char * buffer, size_t bytes, const char * name )
{
FILE * output = fopen( name, "wb");
if ( !output )
{
perror( "ERROR" );
return 0;
}
fwrite( buffer, sizeof( char ), bytes, output);
fclose( output );
return 1;
}
int main( )
{
write( "Hello world!", strlen( "Hello world!" ), "output.txt" );
return 0;
}
您调用fwrite()
时使用了错误的参数顺序。第二个参数是要写入缓冲区的每个元素的字节大小。第三个参数是要写入缓冲区的元素总数。有关参考,请参见fwrite()
。
使用fwrite()
创建文件时,应指定扩展名。否则,系统将创建一个泛型类型的文件。
没有必要在作为参数传递给perror()
的字符串后面添加冒号和空格。函数会为您执行此操作。有关参考,请参阅perror()
分解问题。
编写一个连续四次调用函数的程序。如果没有失败,那么你就知道问题出在其他地方。
您可以将更多的原始程序添加到测试程序中,也可以开始减去原始程序的部分。先备份它,或者将它提交给源代码控制。
当你做的事情看起来如此奇怪时,很可能问题就完全不同了。你的程序可能正在写入它不拥有的内存。例如,如果程序的一部分持有指向某个对象的指针,而该对象被删除,然后mlock分配并重用该内存,然后程序使用该旧指针,则它将重写mlock信息,从而导致崩溃。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 使用MMAP与FSTREAM或FOPEN访问二进制文件
- 在 EXE 中嵌入一个文本文件,可以使用 fopen 访问该文件
- mlock中的访问冲突
- fopen-mlock访问违规