双指针输出数组参数异常
Double pointer out array parameter exception
我有以下函数,我打算加载着色器(错误检查删除为简洁):
unsigned int readFile(const char* file, char** buffer)
{
FILE* fp;
fopen_s(&fp, file, "rb");
fseek(fp, 0, SEEK_END);
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
*buffer = new char[size + 1];
fread(*buffer, 1, size, fp);
*buffer[size] = 0; // BAD LINE, only [0] is fine.
fclose(fp);
return 0;
}
它被调用:
char* fileContents = nullptr;
readAllFile("test.txt", &fileContents);
我想不出怎么修那条坏线。当我使用char*&buffer作为输出参数,它工作得很好,在很大程度上,引用在功能上与指针相同,对吧?
错误是:
在My World_Win32_Debug.exe中抛出0x011919D4异常:0xC0000005:访问冲突写入位置0xCCCCCCCC.
我应该如何设置缓冲区的最后一个元素为0 (null终止符)?我已经查看了调试器和缓冲区的内容是有效的,并正确设置,直到到达坏行,尽管缓冲区每次都以相同的方式引用。
只有[0]工作良好,这表明我的地址只有指针本身,而不是它的数据,但我不知道如何解决它。我所尝试的其他方法都给出了编译错误。
我知道在很多情况下引用是首选,这里还有其他问题,但我确实需要知道为什么我首先遇到上面的问题。
你想要这个:
(*buffer)[1] = 0;
代替:
*buffer[1] = 0; // same as *(buffer[1]) = 0;
无奈之下,我试着在每个地方加上星号和括号,然后我意识到了这个问题。buffer[size]而不是buffer。使用(*缓冲)(大小)修复问题。
相关文章:
- 有没有办法捕获 STL 函数未被赋予正确参数的异常?
- 调用参数不是原子参数的函数是此代码引发异常的原因吗?
- 我正在尝试创建一个使用 c++ 中的参数包构造函数的异常类
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 当构造函数的参数类型错误时引发异常
- 在 Myfile.exe 中0x00831D39时未处理的异常:0xC00000FD:堆栈溢出(参数:0x0000000
- 为什么可以指定异常规范的参数类型
- 如何避免字符串到整数转换情况下的无效参数异常
- basic_string::替换的超出范围异常,而在范围内,正如调试相同参数的输出所证明的那样
- 自动存储中没有无参数构造函数的类对象和异常
- 为什么初始化构造函数列表参数时会发生异常?
- JNI自定义异常具有多个参数
- 防止在将未引发的异常作为参数传递时在"throw e;"中切片
- 传递参数时引发异常
- 如果在可变参数模板解包中达到终止函数,则出现异常
- 与构造函数参数相关的异常安全的习语
- 从 noexcept 函数参数的构造函数引发的异常会立即导致对 std::terminate() 的调用吗?
- 插入>>运算符重载:从 CIN 检索对象的 CTOR 参数时的异常处理
- 接收器参数和异常
- 双指针输出数组参数异常