0

構造体、共用体、配列のポインターを介してスタックがどのように割り当てられるかを示したいのですが、アプローチ方法がわかりません。以下は私の試みです。

// to check the boundary
char *minimum_pointer, *maximum_pointer ;

// to check marked
void markmark(char *x, int size, char marking_address) {
  minimum_pointer = x;
  maximum_pointer = minimum_pointer + size;
  // is this correct?
  // I am trying to place marking_address 
  //   to every byte of x

  if (*minimum_pointer>marking_address || *maximum_pointer<marking_address) {
    printf("%s \n", "out of boundary");
  }

  int number_of_array_element = size/sizeof(char);
  for (int i=0; i<number_of_array_element; i++) {
    if (&x[i] >= minimum_pointer && &x[i] <= maximum_pointer) {
     x[i] = marking_address;
     // am I doing this right?
     // I need to place the address to every byte of input x
   }
  }
}

int main(int argc, const char * argv[]) {

  struct structure_example {
    char* a ;
    char b[20] ;
    float c ;
  } str_ex;
  markmark((char *) &str_ex, sizeof(str_ex), 0xa1);

  union union_example {
    float a ;
    char b ;
    int c ;
  } uni_ex;
  markmark((char *) &uni_ex, sizeof(uni_ex), 0xa2);

  char arr_ex[50] ;
  markmark((char *) &arr_ex, sizeof(arr_ex), 0xa3);

  return 0;
}

私の質問は

  maximum_pointer = minimum_pointer + size;
  // is this correct?
  // I am trying to place marking_address 
  //   to every byte of x

そしてもう一つの質問は

  int number_of_array_element = size/sizeof(char);
  for (int i=0; i<number_of_array_element; i++) {
    if (&x[i] >= minimum_pointer && &x[i] <= maximum_pointer) {
     x[i] = marking_address;
     // am I doing this right?
     // I need to place the address to every byte of input x
   }
  }

私を混乱させているのは、構造体、共用体、および配列を初期化する方法と必要なものです。

ありがとう、

4

1 に答える 1

-1

スタックのアドレスが必要minimum_pointer = xな場合、それは正しくありません。それは、 minimum_pointerx が指すのと同じものを指すだけです。

char* p = "42";
markmark(p, ...

スタックについては何も言いません。代わりに x のアドレスを取得する必要があります

minimum_pointer = &x;

標準ヘッダー ファイルstdarg.hを参照すると、スタックの操作方法のヒントが得られると思います。

于 2013-10-25T07:01:52.087 に答える