【发布时间】:2011-09-04 19:12:45
【问题描述】:
我需要一些关于 char* 初始化和 C 中 strstr 的帮助。这是一般问题:
我有一个函数func1
func1() func2();
问题是 valgrind 给出的错误基本上是说 strstr 可能正在使用未初始化的值。为了纠正这个问题,我必须做类似char* str = "hello world"; 的事情,但我不能realloc,这是一个问题。
我已经用随机字符串测试了我的程序,问题是 valgrind 将str 视为未初始化,但我只是不知道如何在不摆脱重新分配能力的情况下对其进行初始化。有什么建议么?
错误是:
==14356== Conditional jump or move depends on uninitialised value(s)
==14356== at 0x4C29313: strstr (in path)
==14356== by 0x401983: func2 (in path)
==14356== by 0x401B06: func1 (in path)
==14356== by 0x4013D7: main (in path)
==14356==
==14358== Syscall param execve(argv[i]) points to uninitialised byte(s)
at 0x4ECFCB7: execve (in path)
==14308== by 0x4E6A76C: do_system (in path)
==14308== by 0x4013ED: main
已编辑:在实际功能中添加,更改名称等。
【问题讨论】:
-
你能告诉你调用 func1 和 func2 的参数是什么吗?
-
信息不足。显示调用 func2 的代码。
-
对不起,我更新了。 func1 中的最后一行应该是
str = func2(path, str);。调用 func1 的代码是char* cmd = func1(&i, len, arr, path);,其中i是有效整数,len是arr的有效长度,arr是字符串数组,path是单个字符串。