Nunca confie na memória

Hoje tive uma experiência divertida com parte do meu código, alocando um monte de memória
e copiando alguns dados para ela:

double* sendbuffer = new double[a * N];
// Copy over the local data to the prepared sendbuffer.
memcpy
(sendbuffer + (b) * N, from, c * N * sizeof(double));

Embora isso funcione muito bem em sistemas com muita memória, causa problemas no sistema com pouca memória, visto que sendbuffer pode apontar para bits arbitrários na RAM e, portanto, pode causar todos os tipos de problemas.

Certifique-se de configurar o memset, por exemplo, antes de alterar partes da memória:

double* sendbuffer = new double[a * N];
// Initialize the memory.
memset
(sendbuffer, 0, a * N * sizeof(double));
// Copy over the local data to the prepared sendbuffer.
memcpy
(sendbuffer + (b) * N, from, c * N * sizeof(double));