2

別の 3d への 3d ポインターを memcpy するにはどうすればよいですか? 私はすでに次のことを試しました:

void somefunction(ArrayBlock **** b1, int noOfBlocks, ArrayBlock **** b2){  
   memcpy((&b2), (&b1), noOfBlocks*sizeof(ArrayBlock));
}

これにより、gdb で次のエラーが表示されます。

[Inferior 1 (process 8528) exited with code 030000000005]

b1 と b2 の両方に、次のようにメイン関数でメモリが割り当てられました。

ArrayBlock ***b2;
b2 = malloc(max_x * sizeof(ArrayBlock **));
for (i = 0; i < max_x; ++i)                             
{
    b2[i] = malloc(max_y * sizeof(ArrayBlock *));
    for (j = 0; j < max_y; ++j)
    {
        b2[i][j] = malloc(max_z* sizeof(ArrayBlock));
    }
}


解決:

3D ポインター (配列) の初期化が連続していないため、1 つの memcpy では不十分であると考えました。

これは私がやったことです:

int i2, j2;
for(i2 = 0; i2 < max_x; i2++){
  for(j2 = 0; j2 < max_y; j2++){
    memcpy(&(*b2)[i2][j2][0], &(*b1)[i2][j2][0], max_z*sizeof(ArrayBlock));
  }
}

助けてくれた人たちのおかげで、今回は本当にうまくいっていると思います。

4

1 に答える 1