[petsc-users] Memory corruption with two-dimensional array and PetscMemzero
Jed Brown
jed at jedbrown.org
Tue May 20 08:17:27 CDT 2014
Matthew Knepley <knepley at gmail.com> writes:
>> array = (PetscScalar**)malloc(sizeof(PetscScalar*) * dof);
>> for (k = 0; k < dof; k++){
>> array[k] = (PetscScalar*)malloc(sizeof(PetscScalar) * dof);
>> }
>>
>> When I pass it to MatSetValuesBlocked() there is a problem. Either Petsc
>> complains because I am not passing it the right way or when it accepts it,
>> wrong data is passed because the solution is not correct. Maybe Petsc
>> expect dof*dof values and only dof are passed ?
>>
>
> You can only pass contiguous memory to MatSetValues().
And, while perhaps atypical, VecGetArray2D will give you contiguous
memory behind the scenes, so it would work in this case. (Make a Vec of
the right size using COMM_SELF instead of malloc.)
With C99, you can use VLA pointers to get the "2D indexing" without
setting up explicit pointers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140520/359f6aa4/attachment.pgp>
More information about the petsc-users
mailing list