Re: on memset
* Vincent SHAO:
On 4?16?, ??2?06?, "Alf P. Steinbach" <al...@start.no> wrote:
*VincentSHAO:
int distance[MAX_X][MAX_Y];
memset(distance,-2,MAX_X*MAX_Y*sizeof(int));
Academically, the buffer "distance" should have been filled with -2
after these two line,
No.
but, memset just fail to do the trick, they are still a garbage value
"-16843010"
why?
It seems your compiler creates program that use 32 bit two's complement 'int'.
In that case -2 is represented as bit pattern 0xFFFFFFFE, and as signed char
value, 0xFE, and filling an 'int' with byte value 0xFE gives you 0xFEFEFEFE,
which represents -16843010.
See the FAQ for more safe ways to represent matrices (or go directly to Boost
library).
Cheers, & hth.,
- Alf
Thanks a lot.
And that is to say, i have to use double 'for' to init the buffer if i
want each elem in the buffer to be -2?
No.
The standard library has standard algorithms and even standard containers.
Perhaps the most straightforward (but see earlier advice) is
#include <vector>
int main()
{
using namespace std;
int const maxX = 2;
int const maxY = 3;
vector< vector<int> > distance( maxX, vector<int>( maxY, -2 ) );
// ...
distance[1][2] = 12345;
}
Cheers, & hth.,
- Alf