2009-10-27 64 views
0

我试图用char * c = s - sizeof(unsigned);来检查堆中的值。 但它总是给我留言。我不知道我做了什么错?检查堆中的值

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; 
} 
+2

什么是s - 它未在上面的代码段中定义/声明? – 2009-10-27 23:54:15

+0

oops,我做了修改。 这是myStruct – user133466 2009-10-28 00:15:50

+0

你还有'strlen(s)',所以这仍然不是你真正的代码。你真的需要粘贴你正在编译和运行的确切代码 - 当我把我的车带到车库是因为它有问题,它确实是我的车,而不是我在其他地方找到的类似车。 8-) – RichieHindle 2009-10-28 00:29:48

回答

1

恕我直言,对于0xdeadbeef检查应阅读

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

和能力

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

检查你的方式它,你正在阅读单个字符而不是整数,我认为你不打算这样做。

(我假设myStruct应该是一个指向ptr字符串struct Mystruct - 这是对我来说很有意义的唯一途径)

另外,请注意,这不是真正的便携式C,因为编译器是免费的添加填充以对齐结构成员 - 也许最后一种方法是使用宏并获取指向整个结构的指针。