迭代数组转换为void*

Eir*_*ron 4 c casting void-pointers

我创建一个数组:

unsigned short* array = malloc(sizeof(unsigned short)*N);
Run Code Online (Sandbox Code Playgroud)

为其分配值:

for(i=0; i<N; i++){
    array[i] = rand()%USHRT_MAX;
}
Run Code Online (Sandbox Code Playgroud)

将其转换为void*并将其传递给工作线程,该线程将在数组中找到最大值:

pthread_create(&threads[0], NULL, findMax, (void*)&array);
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

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);
}
Run Code Online (Sandbox Code Playgroud)

问题是数组中指定的数字格式错误.例如,对于N个随机生成的数字:3664 50980 37495 12215 33721,此循环将解释数字如下:

table[0] = 28680
table[1] = 2506
table[2] = 5
table[3] = 0
table[4] = 32736
Run Code Online (Sandbox Code Playgroud)

使用5和0作为阵列中第2和第3位的重复模式.

我显然超越了一些内存边界,这里发生了什么以及如何解决它?

Jos*_*ose 11

更改:

(void*)&array
Run Code Online (Sandbox Code Playgroud)

对此:

(void*)array
Run Code Online (Sandbox Code Playgroud)

因为void* findMax(void* arg)需要一个指针,并且你传递了指针的地址.

  • 你甚至不需要施放. (6认同)