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