【问题标题】:Cant allocate memory using MALLOC无法使用 MALLOC 分配内存
【发布时间】:2012-02-26 16:08:27
【问题描述】:

谁能帮我看看这里出了什么问题? 我无法使用 malloc 分配内存...

    bReadFile = ReadFile( hConsoleFile, &ReadFileBuffer, MaxCharToRead, &CharsRead, NULL );

【问题讨论】:

  • 文件有多大?你有多少内存?
  • 当您尝试运行该代码时会发生什么?
  • 我们需要更多详细信息——您是遇到编译时错误(运行编译器时出现错误)还是运行时错误(运行程序时出现错误?)错误消息的文本?
  • 我的 ReadFileBuffer 中有一个 ...该文件只有 35 个字符,dwFileSize 可以完美读取。
  • malloc 通常会失败,因为它无法分配足够的内存。设置断点或打印 dwFileSize 的值并确保您有足够的内存来分配它。如果文件很大,请尝试分配静态数量并以块的形式读取文件。

标签: c memory-management malloc wininet dynamic-memory-allocation


【解决方案1】:

您在对ReadFile 的调用中有&ReadFileBuffer。您应该传递ReadFile 指向缓冲区的指针,而不是指向缓冲区指针的指针。

来自documentation

lpBuffer [out]
    A pointer to the buffer that receives the data read from a file or device.

因为ReadFileBuffer 一个指向缓冲区的指针,这就是你应该传递的。

【讨论】:

    【解决方案2】:

    ReadFile() 的签名是这样的:

    BOOL WINAPI ReadFile(
      __in         HANDLE hFile,
      __out        LPVOID lpBuffer,
      __in         DWORD nNumberOfBytesToRead,
      __out_opt    LPDWORD lpNumberOfBytesRead,
      __inout_opt  LPOVERLAPPED lpOverlapped
    );
    

    第二个参数应该是指向缓冲区的指针,而不是指向缓冲区指针的指针。这就是您执行&ReadFileBuffer 时得到的结果。调用应该是:

    bReadFile = ReadFile(hConsoleFile, ReadFileBuffer, MaxCharToRead, &CharsRead, NULL);
    

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 2015-01-05
      • 2013-02-23
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多