linux - C代码中的段错误

标签 linux permissions memory segmentation-fault gpio

我昨天写了一个C 代码,运行良好。现在我想在文件中做一些更改,所以我只是将这段代码复制到一个新文件中。新文件的编译很好,但是当我尝试运行我的可执行文件时,我遇到了 segmentation fault。但是我以前的代码正在运行。最初我认为这是一个权限问题,所以我使用 chmod 777 更改了可执行文件的权限。但我仍然遇到 segmentation fault。这是我的代码:-

#include <stdio.h>
#include <time.h>
void pauseSec(int sec);
int main() {
        FILE *io,*iodir,*ioval,*iodir_S,*ioval_S,*io_S,*iodir_P,*ioval_P,*io_P;

        io = fopen("/sys/class/gpio/export", "w");
        fseek(io,0,SEEK_SET);
        fprintf(io,"%d",15);
        fflush(io);
        iodir = fopen("/sys/class/gpio/gpio15/direction", "w");
        fseek(iodir,0,SEEK_SET);
        fprintf(iodir,"out");
        fflush(iodir);
        while(1)
        {
                fprintf(ioval,"%d",1);
                fflush(ioval);
                pauseSec(1);
                fprintf(ioval,"%d",0);
                fflush(ioval);
                pauseSec(1);
        }
        fclose(io);
        fclose(iodir);
        fclose(ioval);
        return 0;
}
void pauseSec(int sec) {
        time_t now,later;
        now = time(NULL);
        later = time(NULL);
        while((later - now) < (double)sec)
        later = time(NULL);
}

我想知道为什么在两个不同的文件中编写相同的代码时表现不同。这可能是什么原因?

最佳答案

问题来了,忘记初始化 ioval。正确的代码在这里:-

#include <stdio.h>
#include <time.h>
void pauseSec(int sec);
int main() {
        FILE *io,*iodir,*ioval,*iodir_S,*ioval_S,*io_S,*iodir_P,*ioval_P,*io_P;

        io = fopen("/sys/class/gpio/export", "w");
        fseek(io,0,SEEK_SET);
        fprintf(io,"%d",15);
        fflush(io);

        iodir = fopen("/sys/class/gpio/gpio15/direction", "w");
        fseek(iodir,0,SEEK_SET);
        fprintf(iodir,"out");
        fflush(iodir);

        ioval = fopen("/sys/class/gpio/gpio15/value", "w");

        while(1)
        {
                fprintf(ioval,"%d",1);
                fflush(ioval);
                pauseSec(1);
                fprintf(ioval,"%d",0);
                fflush(ioval);
                pauseSec(1);
        }
        fclose(io);
        fclose(iodir);
        fclose(ioval);
        return 0;
}
void pauseSec(int sec) {
        time_t now,later;
        now = time(NULL);
        later = time(NULL);
        while((later - now) < (double)sec)
        later = time(NULL);
}

关于linux - C代码中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256334/

相关文章:

php - 减少服务器资源和 php 到 C++ 的编译

python - 在 Python 中人为地创建内存使用

memory - JVM 内存段分配

python - 电子前沿基金会的猫笑话

linux - rm不能删除以 "--"开头的文件

asp.net - LegacyCasModel ="true"和动态数据/操作

json - 实现标记的 AWS IAM 策略

linux - chown 和 chmod 不起作用(Raspberry Pi 2 - Jessie)

linux - Docker:什么是带有 Linuxkit 的 Windows 上的新 Linux 容器 (LCOW)

python - 让 sublime text 3 使用 anaconda python