检查堆中的值

时间:2009-10-27 23:49:26

标签: heap

我正在尝试使用char * c = s - sizeof(unsigned)检查堆中的a; 但它总是给我带来胡言乱语。我想知道我做错了什么......

    typedef 
    struct String {
     int length;
     int capacity;
     unsigned check;
     char ptr[0];
    } String;

char* modelStrrealloc(char* myStruct, int new_capacity){
 char* c = myStruct - sizeof(unsigned);
 int length = strlen(s);
 String *string;
 if (c == 0xdeadbeef ){
  printf("1st if statement");
  if (*(c - sizeof(int))< new_capacity){
   string = malloc(sizeof(String) + new_capacity + 1);

   printf("if statement");
   assert(string != 0);
     (*string).length = length;
     (*string).capacity = new_capacity + 1;
      strcpy(string->ptr, myStruct);
   (*string).check = "~0xdeadbeef";
   modelStrfree(myStruct);
   return string->ptr;
  }
  }
  return myStruct;
}

1 个答案:

答案 0 :(得分:1)

恕我直言,0xdeadbeef的检查应该是

 if (*(unsigned*)c == 0xdeadbeef ){

并检查容量

  if (*(int*)(c - sizeof(int))< new_capacity){

你拥有它的方式,你正在阅读单个字符而不是整数字,我想你并不打算这样做。

(我认为myStruct应该是指向ptrstruct Mystruct字符串的指针 - 这是对我有意义的唯一方式)

另外,请注意,这不是真正的可移植C,因为编译器可以自由添加填充以对齐struct成员 - 也许berret方法是使用offsetof宏并获取指向整个结构的指针