Reading Uninitialized Memory

liujiaji 2010-02-04 03:36:54
static NOINLINE int Read16(char *buf,int nVar)
{
int v=0;
if(buf) //buf是传过来的指针,指向有一定数据的内存地址
{
v = LOAD16LE(buf); //16进制转换10进制数
if(v > nVar) //nVar假如是32762
v = v - 65535;
return v;
}
else
return 0;
}

用VS里的DevPartner Error Detection插件工具测试,总是提示:Uninitialized Memory Read: Pointer 0x0283D37C (2) refers to uninitialized data in block 0x0283C9D0 (16384) allocated by malloc.

是红色字体部分。

程序运行倒是正常,只想弄清这个buf指针指向的内存需要初始化吗?它已经指向了一块内存了?
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujiaji 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cattycat 的回复:]
如果这个指针不空,但没有初始化,也会出问题的。
比如char buf[20];这个buf就没初始化。一般不初始化是不会造成问题的,但你strlen(buf)就结果不确定了,所以建议养成好习惯,初始化一下。
[/Quote]

就是郁闷在这个地方:我就是要处理buf指向的数据。要是初始化不就不是我想要处理的数据了吗?
cattycat 2010-02-04
  • 打赏
  • 举报
回复
如果这个指针不空,但没有初始化,也会出问题的。
比如char buf[20];这个buf就没初始化。一般不初始化是不会造成问题的,但你strlen(buf)就结果不确定了,所以建议养成好习惯,初始化一下。
liujiaji 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 toborac 的回复:]
如果你调用这个函数时,没有设置buf指针,那么它可能是任何值,取决于当时具体的内存情况,那么,加入buf=2,则buf!=0,则进入你的if块,当运行LOAD16LE是,起码会有一个对地址0x00000002的读操作,也许酒会导致这个错误
[/Quote]

我说的不是这个意思,我是说该提示是“读取没初始化的内存”我这个buf已经指向了一块内存地址。我就想问,为什么还要我“初始化这块内存”
toborac 2010-02-04
  • 打赏
  • 举报
回复
如果你调用这个函数时,没有设置buf指针,那么它可能是任何值,取决于当时具体的内存情况,那么,加入buf=2,则buf!=0,则进入你的if块,当运行LOAD16LE是,起码会有一个对地址0x00000002的读操作,也许酒会导致这个错误
ma100 2010-02-04
  • 打赏
  • 举报
回复
LOAD16LE写的有问题,内存越界
mostmark 2010-02-04
  • 打赏
  • 举报
回复
上下文呢。buf到底是什么?值呢?

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧