c++ - 如何消除写入位置的访问冲突

标签 c++ c visual-studio-2012

我正在用 C 处理大小为 ((128*75)*(128*75)) 的数组。每当我将数组声明为全局数组时,就不会出现类似的问题

#include<stdio.h>
float buf[(128*75)*(128*75)]
int main()
{
   //using buf in different functions works fine
}

但是每当我使用 malloc 声明它并在 main() 中使用时都会出现访问冲突写入位置错误,

#include<stdio.h>
int main()
{
   float * buf;
   buf = malloc((128*75)*(128*75));

   //using buf in different functions gives error
}

这是什么原因?

最佳答案

malloc(x) 仅保留 x 字节,而不保留 x float

全局数组的大小确实是 128*75*128*75 float 。 malloc 缓冲区的大小仅为 128*75*128*75 字节,即只能包含所需数量的 float 的四分之一(假设您的平台上的 float 为 4 字节)。

这就是为什么您的访问可能超出了 malloc 缓冲区的限制并出现段错误/访问冲突或在您的平台上调用的任何内容。

您可以使用calloc(),也可以使用128*75*128*75*sizeof(float)的大小作为malloc( )

关于c++ - 如何消除写入位置的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196444/

相关文章:

visual-studio - 在 Visual Studio 中启用/禁用书签

C++ 使用库连接到 mysql 错误

c++ - switch 语句和对象隐式 int 转换

c++ - 使用带有 '>>' 运算符的 std::istringstream 的奇怪行为

c++ - 数据库连接可以重用吗?

c - 我无法在结构数组中输入所有信息

c - 在 C 中使用 (char *) 0 有什么特殊方法吗?

c - 为什么数组有时会被越界调用

visual-studio-2012 - 为 "all users"安装 LightSwitch 2 层应用程序?

c++ - 使用 BOOST 时出现 LNK 错误 1561