gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:56:11 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com