C mmap可以通过函数传递地址吗?
我正在尝试使用mmap读取beaglebone black上的物理内存。这通常是可行的,但我想创建一个函数,因为这段代码经常重复。在这个例子中,我调用函数memory。我只是想知道函数内存是否会返回地址,并且在它被传递回main之后是否仍然可以访问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
#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或任何其他类型一样。当调用函数时取消引用未初始化的指针时,代码中有未定义的行为。而且因为它是一个空白*它甚至不会构建,因为你不能在不施法的情况下取消对空白*的引用。在调用之前,您没有声明内存函数,因此编译器可能会猜错函数签名是什么。除此之外,从函数返回指针没有问题,都在同一个过程中。键入示例代码以快速。。。非常感谢。