gpt4 book ai didi

c - 为什么 memset 会输入错误的值?

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:19 25 4
gpt4 key购买 nike

我正在尝试以这种方式使用 memset() 填充矩阵中的零区域:

unsigned short *ptr;
for(int i=0; i < nRows; ++i)
{
ptr = DepthMat.ptr<unsigned short>(i); /* OCV matrix of uint16 values */
for(int j=0; j<nCols; ++j)
{
uint n=0;
if(ptr[j] == 0) /* zero region found */
{
d_val = ptr[j-1]; /* saves last non-zero value */
while(ptr[j+n] == 0)
{ /* looks for non zero */
++n;
}
d_val = (d_val < ptr[j+n] ? d_val : ptr[j+n]);
memset( ptr+j, d_val, n*sizeof( ptr[0]) );
j += n;
}
}
}

我寻找零序列,然后存储位置(ptr+j-1ptr+j+n)和零区域边界的值,最后我使用 memset() 将零替换为 d_val。问题是,当我检查存储的值时,它们与 d_val 不匹配,例如,我输入值“222”但得到“57054”。有什么线索吗?

最佳答案

memset() 的值参数只是一个字节,即使参数的类型是 int

The manual page将该功能描述为:

memset - fill memory with a constant byte

因此,只有 d_val 的最低有效 8 位将被写入内存。由于您将内存视为 short 的数组,因此您会得到“困惑”的值,这些值由在 short 的字节中重复的相同字节组成。

简而言之,不要这样做;使用 for 循环重复写入实际的 short

关于c - 为什么 memset 会输入错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881555/

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