c - 遍历转换为 void* 的数组
问题描述
我创建一个数组:
unsigned short* array = malloc(sizeof(unsigned short)*N);
为其赋值:
for(i=0; i<N; i++){
array[i] = rand()%USHRT_MAX;
}
将其转换为 void* 并将其传递给工作线程,该线程将在数组中找到最大值:
pthread_create(&threads[0], NULL, findMax, (void*)&array);
看起来像这样:
void* findMax(void* arg){
int i = 0;
unsigned short max = 0;
unsigned short* table = (unsigned short*)arg;
for(i=0;i<N;i++){
if(table[i]> max){
max = table[i];
}
}
printf("Max: %d\n", max);
}
问题是数组中分配的数字格式错误。例如,对于 N 个随机生成的数字:3664 50980 37495 12215 33721,此循环将改为将这些数字解释为:
table[0] = 28680
table[1] = 2506
table[2] = 5
table[3] = 0
table[4] = 32736
以 5 和 0 作为数组中第 2 和第 3 位的重复模式。
我显然超出了一些内存界限,这里发生了什么,我该如何解决?
解决方案
改变:
(void*)&array
对此:
(void*)array
因为void* findMax(void* arg)
需要一个指针,并且您正在传递指针的地址。
推荐阅读
- python - Python pandas to read an Excel file with more than one row headers
- r - 是否有用于检查向量中的成员资格的 R 函数?
- sas - SAS 冒号格式修饰符
- matlab - 矢量化八度
- laravel - 我在 Ubuntu 20.04 上收到“laravel:找不到命令”
- r - Zoo 包中的 R as.yearqtr:如何删除空白
- c# - 如何为 ASP.Net 身份用户模型创建关系(一对一、多对多)
- forms - 表单帮助 - 从具有组合框或文本框值的表中获取要填充的字段
- php - 没有从下拉 PHP 中获得所需的值
- python - Python:嵌套for循环