我有一个结构作为void*指针传入
void *find_queens(void *args) {
Run Code Online (Sandbox Code Playgroud)
我尝试使用此方法将此指针转换为可用的结构
struct queens_arg *data = (struct queens_arg *) args;
Run Code Online (Sandbox Code Playgroud)
但是,存储在此内的数组
struct queens_arg {
int board[64];
int focus_idx;
};
Run Code Online (Sandbox Code Playgroud)
被称为董事会现在正在被破坏,并没有反映原始价值,有谁知道为什么?谢谢!
更多信息:
这是函数的开始:
void *find_queens(void *args) {
//vars
pthread_t thread1, thread2;
struct queens_arg *data = (struct queens_arg *) args;
int board[64];
copy_array(data->board, board);
print_board(data->board);
Run Code Online (Sandbox Code Playgroud)
这就是它的名称:
int board[64] = {
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
};
struct queens_arg *args = malloc(sizeof (struct queens_arg));
args->focus_idx = 0;
copy_array(board,args->board);
(*find_queens)(&args);
Run Code Online (Sandbox Code Playgroud)
当我打印数组时,我得到了这个:
39456784 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
而不是一路0.这很奇怪.
我认为问题在于你传递给函数的是a struct queens_arg**,而不是a struct queens_arg*.请注意,您在此处传入指针指针:
(*find_queens)(&args);
Run Code Online (Sandbox Code Playgroud)
当你尝试在这里进行类型转换:
struct queens_arg *data = (struct queens_arg *) args;
Run Code Online (Sandbox Code Playgroud)
您将a转换struct queens_arg**为a struct queens_arg*,这不是有意义的转换.你最终会读取指针附近的数据,就好像它是一个struct queens_arg,这不是你想要的.
要解决这个问题,只需自己传入args指针,而不是指向指针的args指针:
(*find_queens)(args);
Run Code Online (Sandbox Code Playgroud)
出于好奇,你有没有理由void*而不是一个struct queens_arg*?问题的一部分是编译器无法诊断无意义的演员表,因为你void*先通过汇集所有内容.
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |