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_pointer指向 x 指向的同一件事,即

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

它没有说明堆栈,您需要取 x 的地址

minimum_pointer = &x;

我认为,如果您查看标准头文件stdarg.h,您可以获得一些如何使用堆栈的提示。

于 2013-10-25T07:01:52.087 回答