Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C mmap可以通过函数传递地址吗?_C_Ubuntu_Beagleboneblack - Fatal编程技术网

C mmap可以通过函数传递地址吗?

C mmap可以通过函数传递地址吗?,c,ubuntu,beagleboneblack,C,Ubuntu,Beagleboneblack,我正在尝试使用mmap读取beaglebone black上的物理内存。这通常是可行的,但我想创建一个函数,因为这段代码经常重复。在这个例子中,我调用函数memory。我只是想知道函数内存是否会返回地址,并且在它被传递回main之后是否仍然可以访问 #include<fcntl.h> #include<sys/mman.h> int main(void) { int fd; int read32bytes; volatile void *data

我正在尝试使用mmap读取beaglebone black上的物理内存。这通常是可行的,但我想创建一个函数,因为这段代码经常重复。在这个例子中,我调用函数memory。我只是想知道函数内存是否会返回地址,并且在它被传递回main之后是否仍然可以访问

#include<fcntl.h>
#include<sys/mman.h>

int main(void)
{
    int fd;
    int read32bytes;
    volatile void *data;
    fd=open("/dev/mem", O_RDWR);
    *data=memory(fd, 64, 0);
    read32bytes=*data;
    munmap(data, 64);
    close(fd);
 }

volatile void *memory(int fd, int sizeInBytes, int offset)
{
    volatile void *address;
    address=mmap(0, sizeInBytes, PROT_READ | PROT_WRITE , MAP_SHARED, fd, offset);
    return address;
}

我能看到的唯一一件事是你做错了,你用*data=把结果赋给了data*data=某物不分配变量数据,而是将某物数据点分配给*数据。由于数据从未设置为指向任何特定的对象,所以您不知道要分配给什么,这很糟糕


要将变量数据分配给调用函数的结果,可以使用data=memoryfd,64,0-就像数据是int或任何其他类型一样。

当调用函数时取消引用未初始化的指针时,代码中有未定义的行为。而且因为它是一个空白*它甚至不会构建,因为你不能在不施法的情况下取消对空白*的引用。在调用之前,您没有声明内存函数,因此编译器可能会猜错函数签名是什么。除此之外,从函数返回指针没有问题,都在同一个过程中。键入示例代码以快速。。。非常感谢。