gpt4 book ai didi

c++ - 使用 valgrind 的未初始化值 - 指针

转载 作者:行者123 更新时间:2023-11-28 06:52:06 40 4
gpt4 key购买 nike

我目前正在使用 valgrind 检查我的程序,一个小的测试程序给了我无法理解的错误:

int size=10;
int i;

float * v1;
v1=new float[size];

float v2[size];

for (i=0;i<size;i++) v1[i]=0;
for (i=0;i<size;i++) v2[i]=0;

v1[0]=1;
v2[0]=1;

v2 工作正常,但 v1 给出了条件跳转或移动取决于 valgrind 上的未初始化值错误。

为什么会这样?另外,最好的做法是像上面的 v2 那样使用数组,还是一样?

提前致谢。

已编辑:添加了其余代码 - 错误出现在

v1=new float[size];
for (i=0;i<size;i++) v1[i]=0;
v1[0]=1;

最佳答案

Why does this happen?

可能是因为你在初始化之前读取了内存。

编辑:根据您添加的代码,您不会在初始化前读取内存。似乎 valgrind 只是偏执,错误是误报。如果您打算将所有元素设置为相同的值,那么使用值初始化会更简单。

Also, is it best practice to use arrays as in the v2 above

是的,但不是因为没有错误。读取未初始化的堆栈内存与读取未初始化的动态内存一样错误。

一般而言,具有自动存储持续时间的变量优于具有动态存储持续时间的变量。除非数组很大,否则您不想用完宝贵的堆栈空间。或者,如果 size 不是编译时常量,在这种情况下您不能在堆栈上分配它。

关于c++ - 使用 valgrind 的未初始化值 - 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762007/

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