Use portable array initialisation.

Memset() and calloc() define arrays of bytes, not general objects.  This
is a lesson learned many times over by generations of C programmers...
This commit is contained in:
Bård Skaflestad 2011-09-30 09:39:54 +02:00
parent 06cb0ab97f
commit d085ddb314
2 changed files with 18 additions and 6 deletions

View File

@ -143,10 +143,11 @@ partition_compress(int n, int *p)
max = MAX(max, p[i]); max = MAX(max, p[i]);
} }
compr = calloc(max + 1, sizeof *compr); compr = malloc((max + 1) * sizeof *compr);
if (compr != NULL) { if (compr != NULL) {
for (i = 0; i < n; i++) { compr[p[i]]++; } for (i = 0; i < max + 1; i++) { compr[i] = 0; }
for (i = 0; i < n; i++) { compr[p[i]]++; }
compr[0] = -1 + (compr[0] > 0); compr[0] = -1 + (compr[0] > 0);
for (i = 1; i <= max; i++) { for (i = 1; i <= max; i++) {
@ -242,7 +243,9 @@ partition_invert(int nc, const int *p, int *pi, int *inverse)
nbin = max_block(nc, p) + 1; /* Adjust for bin 0 */ nbin = max_block(nc, p) + 1; /* Adjust for bin 0 */
/* Zero start pointers */ /* Zero start pointers */
memset(pi, 0, (nbin + 1) * sizeof *pi); for (i = 0; i < nbin + 1; i++) {
pi[i] = 0;
}
/* Count elements per bin */ /* Count elements per bin */
for (i = 0; i < nc; i++) { pi[ p[i] + 1 ]++; } for (i = 0; i < nc; i++) { pi[ p[i] + 1 ]++; }
@ -310,9 +313,13 @@ partition_create_c2c(int nc, int nneigh, const int *neigh,
{ {
int i, ret, c1, c2; int i, ret, c1, c2;
*pc2c = calloc(nc + 1, sizeof **pc2c); *pc2c = malloc((nc + 1) * sizeof **pc2c);
if (*pc2c != NULL) { if (*pc2c != NULL) {
for (i = 0; i < nc + 1; i++) {
(*pc2c)[i] = 0;
}
for (i = 0; i < nneigh; i++) { for (i = 0; i < nneigh; i++) {
c1 = neigh[2*i + 0]; c1 = neigh[2*i + 0];
c2 = neigh[2*i + 1]; c2 = neigh[2*i + 1];
@ -457,7 +464,9 @@ create_block_conns(int b ,
nc = pb2c[b + 1] - pb2c[b]; nc = pb2c[b + 1] - pb2c[b];
/* Clear start pointers */ /* Clear start pointers */
memset(ia, 0, (nc + 1) * sizeof *ia); for (i = 0; i < nc + 1; i++) {
ia[i] = 0;
}
for (i = pb2c[b]; i < pb2c[b + 1]; i++) { for (i = pb2c[b]; i < pb2c[b + 1]; i++) {
c = b2c[i]; assert (loc[c] == i - pb2c[b]); c = b2c[i]; assert (loc[c] == i - pb2c[b]);

View File

@ -29,15 +29,18 @@ struct CSRMatrix *
csrmatrix_new_count_nnz(size_t m) csrmatrix_new_count_nnz(size_t m)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
{ {
size_t i;
struct CSRMatrix *new; struct CSRMatrix *new;
assert (m > 0); assert (m > 0);
new = malloc(1 * sizeof *new); new = malloc(1 * sizeof *new);
if (new != NULL) { if (new != NULL) {
new->ia = calloc(m + 1, sizeof *new->ia); new->ia = malloc((m + 1) * sizeof *new->ia);
if (new->ia != NULL) { if (new->ia != NULL) {
for (i = 0; i < m + 1; i++) { new->ia[i] = 0; }
new->m = m; new->m = m;
new->nnz = 0; new->nnz = 0;