void findWay(int column,int sum,char *array,int s,stack_t sta)
{
if(array[s+column+2]=='0')
{
プログラムをデバッグすると、「アドレス 0x53 が範囲外です」というエラーが表示されます (if(maze[s+column+2]=='0') at this line)。なんで?
誰か助けてください。
void findWay(int column,int sum,char *array,int s,stack_t sta)
{
if(array[s+column+2]=='0')
{
プログラムをデバッグすると、「アドレス 0x53 が範囲外です」というエラーが表示されます (if(maze[s+column+2]=='0') at this line)。なんで?
誰か助けてください。
s+column+2
配列の境界を超えているため、より多くのメモリを割り当てるarray
か、割り当てられたメモリの外に出ないようにする必要があります。
を使用する場合、ポインターvar[]
を逆参照します。*var
ここでは、0x53 が 0 に近いのでarray
NULL のようです。アクセスするとゼロにarray[s+column+2]
加算(s+column+2) * sizeof(*array)
され、確かに になり0x53
ます。
この印刷array
値は で確認できますprintf("pointer value : %p\n", array);
。
範囲外 は常に、許可された境界の外という 1 つのことだけを意味します。したがって、範囲外のアドレスを取得すると、アドレスが境界の外にあることを意味します。この境界は、プログラム、配列によって定義できます。
s+column+2
の値が配列の長さよりも大きいことを意味します。