c++ - 双指针出数组参数异常

标签 c++ file-io visual-studio-2015 access-violation

我有以下函数,我打算用它来加载着色器(为简洁起见删除了错误检查):

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 作为 out 参数时,它工作正常,并且引用在很大程度上与指针在功能上相同,对吗?

错误是:

Exception thrown at 0x011919D4 in My World_Win32_Debug.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.

我应该如何将缓冲区的最后一个元素设置为 0(空终止符)?我查看了调试器,缓冲区的内容是有效的,并且设置正确直到到达错误行,尽管每次都以相同的方式引用缓冲区。

只有 [0] 工作正常,对我来说这表明我只处理指针本身,而不是它的数据,但我不知道如何处理它。我尝试过的所有其他方法都会出现编译错误。

我知道在很多情况下引用是首选,这里还有其他问题,但我确实需要先知道为什么我会遇到上述问题。

最佳答案

你想要这个:

(*buffer)[1] = 0;

代替:

*buffer[1] = 0;  // same as  *(buffer[1]) = 0;

关于c++ - 双指针出数组参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345466/

相关文章:

java - 即使文件位于目录中,迭代文件也会给出文件未找到异常。你能告诉我为什么吗?谢谢

matlab - 如何将元胞数组附加到 .txt 文件?

c++ - 我可以将 Visual Studio 2015 头文件编译成 dll 并在 VS2013 中使用吗?

c++ - 在 Windows Mobile 6 中禁用 sleep 模式

c++ - 在 x86(32 位)程序集中实例化一个 c++ 类(通过复制将 c++ 类传递给程序集中的方法)

c - 检测当前是否正在读取文件

c++ - VS2015 中的 D3D11.h

git - Visual Studio : View full git commit history (including renames)

c++ - 检测类型是否为关联容器

C++ Sizeof 给出不可预测的结果