c - 查找数组指针的长度 - Valgrind 错误 : Invalid read size of 1

标签 c arrays valgrind

void OneDToTwoD(char* rel){

  /*  all the declarations here */

  while(rel[i] != '\0'){
    i++;
  }

...

在上面的代码中,我“有时”遇到了段错误。 valgrind 检查在行中向我抛出“无效读取大小 1” while(rel[i] != '\0'){

在那一行中,我试图计算出 rel 的长度。 我知道一定有更好的方法来做到这一点。我不能只做 sizeof 可以吗?

最佳答案

如果i初始化为零,并且rel指向有效的内存块,这将很好地工作。

  1. rel 指向无效内存块或 NULL。
  2. rel 不以 \0 终止
  3. i 不以 0 开头。

还有一个答案,你无法从指针知道内存块的大小。指针不是内存块。如果需要,指针可以指定无效的内存块。因此,如果您想知道内存块的长度,请在函数中添加 length 参数。

关于c - 查找数组指针的长度 - Valgrind 错误 : Invalid read size of 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577575/

相关文章:

c++ - dladdr 能够从静态成员获取信息吗?

java - 为什么数组不引用与字符串相同的对象?

java - 如何在java方法中将数组作为参数传递?

Cachegrind 的 cg_annotate 不显示我的源代码的注释

c - 在 printf 中设置可变文本列宽

在 C 中为 malloc 和 free 创建一个包装函数

c - Valgrind:libmysql 示例程序出现 'still reachable:' 泄漏

c++ - 从堆和内存泄漏中删除 C++ 数组

c - free() 期间堆损坏

java - JSP 表达式语言中的数组文字?