我正在用 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/