- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我通过一个目录的多个条目运行此代码时,它通常返回 0,但是在两个目录中(一个 Windows 一个在 Unix 中)我不断收到“错误地址”错误消息。 lstat 和 relative_path 不为空,并且 relative_path 确实指向有效目录。此代码适用于其他目录。这些目录没有任何 RWX 限制。在此之前,我能够调用 opendir 和 readdir 而不会在这些问题目录上收到错误或 NULL 响应。 Valgrind 未显示内存泄漏或其他错误。
struct stat *this_lstat;
...
DIR *dir = opendir(path);
...
dptr = readdir(dir);
...
注意:此时relative_path == "./bin/Debug"。
int return_code = lstat(relative_path, this_lstat);
if (return_code < 0) {
fprintf(stderr, "find: ");
perror(dptr->d_name); //printf("3"); //Error reading the file or directory
return NULL;
}
更新:我添加了对 malloc 和 realloc 的检查,现在我在 lstat 行本身上遇到段错误。不调用错误处理代码。这是堆栈跟踪:程序收到信号 SIGSEGV,段错误。
0xb76f2779 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb) backtrace
#0 0xb76f2779 in ?? () from /lib/tls/i686/cmov/libc.so.6
#1 0xb76ead47 in __lxstat () from /lib/tls/i686/cmov/libc.so.6
#2 0x0804959c in lstat ()
#3 0x0804903c in walk_directory_tree (path=0x805b058 "./testmine",
findme=0x0, type_str=0x0, base_dir_searched=1, dirs_later_array=0x805b0d0)
at pfind.c:266
#4 0x08049106 in walk_directory_tree (path=0xbfa5cca3 ".", findme=0x0,
type_str=0x0, base_dir_searched=1, dirs_later_array=0x804b018)
at pfind.c:282
#5 0x08048c2a in main (ac=2, av=0xbfa5c8a4) at pfind.c:143
最佳答案
据我所知,错误是由于您未能初始化作为第二个参数传递给 lstat
的 this_lstat
造成的。
错误字符串“Bad address”对应于错误代码 EFAULT
,它来自将无效指针传递给系统调用。因此,传递给 lstat
的路径名没有指向可读内存中有效的以 null 结尾的字符串,或者作为第二个参数传递的 struct stat
没有指向't 指向有效的可写内存。
您似乎正在传递一个未初始化的指针,它几乎肯定指向无效内存。 Valgrind 不会提示,因为在系统调用之前,您没有做错任何事情——只有当内核尝试访问内存时,它才会意识到它是无效的。
要解决此问题,请使用 malloc
为 struct stat
分配内存,或者只传递指向堆栈上变量的指针而不是使用指针:
struct stat this_lstat;
lstat(..., &this_lstat);
关于c - lstat : Bad Address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459023/
我如何在 linux/c 中调用 lstat 系统调用,而不是围绕它的 lstat 包装器 (lstat(3))?系统调用没有 SYS_lstat(SYS_lstat... 最佳答案 如果您直接使用系
我正在尝试编写一个程序,calcsize,计算所有子目录的大小。我想创建一个结果缓存,并且只有在我上次运行该程序后目录发生变化时才重新遍历该目录。 类似于: ./calcsize //outputs
我正在为编程课布置作业。 该程序应该: 从命令行接收字符串。 打开当前目录并循环浏览其条目, 并仅在名称以以下开头时才分析条目我从 CMD 传递的字符串。 如果这些条目是常规文件, 我需要计算除空格以
每当我为每个目录运行程序时,即使我使用 ls-ls 检查每个目录的实际大小,也会输出 8 。我正在尝试打印用户输入的所有目录的 st_blocks #include #include #inclu
我递归地列出文件,但是当我尝试列出子目录中的所有文件时出现以下错误。 Error: ENOENT: no such file or directory, lstat 'config' at O
基本上,这应该是一段简单的代码,用于打开目录流并查找符号链接(symbolic link)。每当找到符号链接(symbolic link)时,就应该打印(“找到符号链接(symbolic link)”
我使用 lstat 获取文件的特征,但它似乎不起作用,它返回 -1 和错误 -No such file or directory-。 我尝试 shell 中的路径,键入: :~$ ls /home/m
我有一个由fuse挂载的目录,我打算对这个目录使用lstat()。但是,当我运行以下代码时,它只是在那里等待并且没有任何提示。顺便说一下,我在 Android 模拟器中运行了熔断器。代码是: #inc
当我通过一个目录的多个条目运行此代码时,它通常返回 0,但是在两个目录中(一个 Windows 一个在 Unix 中)我不断收到“错误地址”错误消息。 lstat 和 relative_path 不为
#include #include #include ... lstat(name, &st); ... 我正在使用 CodeBlocks 编写 C 程序。所有其他包括工作正常。我在网
我在跑: Ubuntu 14.04 节点v0.10.25 NPM v 1.3 通过apt-get install安装了NPM。当我尝试安装Gulp时(请参见代码段中的命令),我遇到了这些失败。我已经尝
我正在尝试查找 Windows 计算机上某个文件的文件权限。根据我是否使用 python 方式,我测试过的所有文件总是得到 666。如果我使用系统 stat -c %a 命令,我会得到不同的响应。 我
我正在尝试检查文件是否是符号链接(symbolic link),我的测试似乎不起作用。如何检查符号链接(symbolic link)? if (lstat(file->full_path, &file
当我打开/保存文件时,我的 Linux (Fedora) 机器大约 15 分钟没有响应。我调查了一下,它与/mnt 中的 Windows 安装目录有关。我可以用一个简单的“ls -al/mnt”来重现
我现在正在调试一个系统,在日志中我收到 ENOENT lstat 错误。代码如下。 fs.lstat(self.file, function(err, stats) { 如果(错误){ //其余代码。
我正在调试 PHP 5.2.9 并且一切正常,但今天在调试期间我看到 gdb 在我设置时没有停止: (gdb) break lstat 断点在列表中 (gdb) info breakpointsNum
我正在尝试使用 lstat 获取/proc/pid/exe 文件的字节大小。这是我的代码: int main(int argc, char *argv[]) { struct stat
在 Linux 中,当 stat() 用于损坏的链接文件时,它会失败并返回 -1。所以我使用了成功的 lstat()。 对于 Windows 中的相同情况,_stat() 因快捷方式损坏而失败,但 W
我使用 opendir() 打开目录,然后使用 readdir() 和 lstat() 获取该目录中每个文件的统计信息。按照这个 manpage我写的代码并不像想象的那样工作。它确实列出了当前目录中的
调查 this question 中的行为, 我很惊讶地看到 perl lstat() s 每条路径都匹配一个 glob 模式: $ mkdir dir $ touch dir/{foo,bar,ba
我是一名优秀的程序员,十分优秀!