Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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-将结构成员的地址传递给函数返回错误 答复:_C_Pointers_Struct_Mmap - Fatal编程技术网

C-将结构成员的地址传递给函数返回错误 答复:

C-将结构成员的地址传递给函数返回错误 答复:,c,pointers,struct,mmap,C,Pointers,Struct,Mmap,罪魁祸首是警察。我错过了一个演员 谢谢 上下文 Linux 问题: 你能帮我找到一个写参数的好方法吗 我为什么失败 我失败是因为我不想走正常的路径(参见代码) 我的需要 类似于&(data->mmap)的非常经典的参数,以避免创建一个伪变量,如exposed,从而避免了这个问题 这实际上不起作用 我必须这样做,因为这个函数可能会被不同意义的调用。 结构要复杂得多,根据我在代码中的位置,第二个参数是不同的 代码 我处理这种情况的方法 谢谢在test中,您将本地my_char变量设置为从mmap获得

罪魁祸首是警察。我错过了一个演员 谢谢

上下文 Linux

问题: 你能帮我找到一个写参数的好方法吗

我为什么失败 我失败是因为我不想走正常的路径(参见代码)

我的需要 类似于&(data->mmap)的非常经典的参数,以避免创建一个伪变量,如exposed,从而避免了这个问题

这实际上不起作用

我必须这样做,因为这个函数可能会被不同意义的调用。 结构要复杂得多,根据我在代码中的位置,第二个参数是不同的

代码 我处理这种情况的方法
谢谢

test
中,您将本地
my_char
变量设置为从
mmap
获得的地址。这不会影响
main
中的
\u tmp
变量

如果要更改传递给函数的变量,则必须向其传递指针,如下所示:

void test(mystruct * _input, char ** my_char){
   *my_char = (vhar*)mmap(...);
}

test(data, &data->mmap);

test
中,将本地
my_char
变量设置为从
mmap
获得的地址。这不会影响
main
中的
\u tmp
变量

如果要更改传递给函数的变量,则必须向其传递指针,如下所示:

void test(mystruct * _input, char ** my_char){
   *my_char = (vhar*)mmap(...);
}

test(data, &data->mmap);

test
中,将本地
my_char
变量设置为从
mmap
获得的地址。这不会影响
main
中的
\u tmp
变量

如果要更改传递给函数的变量,则必须向其传递指针,如下所示:

void test(mystruct * _input, char ** my_char){
   *my_char = (vhar*)mmap(...);
}

test(data, &data->mmap);

test
中,将本地
my_char
变量设置为从
mmap
获得的地址。这不会影响
main
中的
\u tmp
变量

如果要更改传递给函数的变量,则必须向其传递指针,如下所示:

void test(mystruct * _input, char ** my_char){
   *my_char = (vhar*)mmap(...);
}

test(data, &data->mmap);
这里有一个完整的解决方案:

void test(mystruct * _input, char ** my_char){
    //Update the reference that was passed
    *my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );

    printf("in function address %p\n", my_char);
}

void mySecondFunction(mystruct * data){
    test(data, &(data->mmap));  // Pass by reference
    printf("data->mmap %p\n",&(data->mmap)); // Prints address of data->mmap
}
这里有一个完整的解决方案:

void test(mystruct * _input, char ** my_char){
    //Update the reference that was passed
    *my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );

    printf("in function address %p\n", my_char);
}

void mySecondFunction(mystruct * data){
    test(data, &(data->mmap));  // Pass by reference
    printf("data->mmap %p\n",&(data->mmap)); // Prints address of data->mmap
}
这里有一个完整的解决方案:

void test(mystruct * _input, char ** my_char){
    //Update the reference that was passed
    *my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );

    printf("in function address %p\n", my_char);
}

void mySecondFunction(mystruct * data){
    test(data, &(data->mmap));  // Pass by reference
    printf("data->mmap %p\n",&(data->mmap)); // Prints address of data->mmap
}
这里有一个完整的解决方案:

void test(mystruct * _input, char ** my_char){
    //Update the reference that was passed
    *my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );

    printf("in function address %p\n", my_char);
}

void mySecondFunction(mystruct * data){
    test(data, &(data->mmap));  // Pass by reference
    printf("data->mmap %p\n",&(data->mmap)); // Prints address of data->mmap
}


是什么阻止你做测试(数据,和(数据-MMAP)),你的处理方式是C代码,而不是C++?是C还是C++?“显而易见”的方法有什么问题(我觉得这更好,因为函数只需要一个参数)?在任何情况下,第二个都需要传递一个指针,
&data->mmap
;在C++中,如果将参数类型更改为<代码> char *和<代码>,第一个将工作。由于未知原因,&(data->mmap)不会将指针值保留回mySecondFunction!!这是一个奇怪的问题。有东西告诉我你没有告诉我们所有的事情。你在处理它时,阻止了你做测试(数据,和(数据-MMAP))吗?这看起来像C代码,而不是C++。是C还是C++?“显而易见”的方法有什么问题(我觉得这更好,因为函数只需要一个参数)?在任何情况下,第二个都需要传递一个指针,
&data->mmap
;在C++中,如果将参数类型更改为<代码> char *和<代码>,第一个将工作。由于未知原因,&(data->mmap)不会将指针值保留回mySecondFunction!!这是一个奇怪的问题。有东西告诉我你没有告诉我们所有的事情。你在处理它时,阻止了你做测试(数据,和(数据-MMAP))吗?这看起来像C代码,而不是C++。是C还是C++?“显而易见”的方法有什么问题(我觉得这更好,因为函数只需要一个参数)?在任何情况下,第二个都需要传递一个指针,
&data->mmap
;在C++中,如果将参数类型更改为<代码> char *和<代码>,第一个将工作。由于未知原因,&(data->mmap)不会将指针值保留回mySecondFunction!!这是一个奇怪的问题。有东西告诉我你没有告诉我们所有的事情。你在处理它时,阻止了你做测试(数据,和(数据-MMAP))吗?这看起来像C代码,而不是C++。是C还是C++?“显而易见”的方法有什么问题(我觉得这更好,因为函数只需要一个参数)?在任何情况下,第二个都需要传递一个指针,
&data->mmap
;在C++中,如果将参数类型更改为<代码> char *和<代码>,第一个将工作。由于未知原因,&(data->mmap)不会将指针值保留回mySecondFunction!!这是一个奇怪的问题。有些东西告诉我你没有告诉我们一切。你还需要用printf打印出来(“data->mmap%p\n”,&(data->mmap));问题还在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1您还需要使用printf(“数据->mmap%p\n”&(数据->mmap))打印出来;问题还在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1您还需要使用printf(“数据->mmap%p\n”&(数据->mmap))打印出来;问题还在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1您还需要使用printf(“数据->mmap%p\n”&(数据->mmap))打印出来;问题还在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1问题在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1问题在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1问题在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1问题在于:我使用了restrict关键字。去掉它就解决了整个问题。。哑的谢谢+1.