一宣言指针就不正常,百思不得其解

一声明指针就不正常,百思不得其解
以下是完整代码,问题见注释

#include <stdio.h>
#include <cstring>
#include <assert.h>

int strline(char *strDestination, const char *strSource, int *offset)
{
    assert(strDestination!=NULL && strSource!=NULL && offset!=NULL);
    char c;
    memset(strDestination,0,strlen(strDestination));
    strSource+=*offset;
    if (*strSource=='\0') return -1;
    while((c=*strSource++)!='\0' && c!='\n' && c!='\r')
    {
        *strDestination++ = c;
        (*offset)++;
    }
    (*offset)++;
    return 0;
}

int main(int argc, char *argv[])
{
    char url[] = "asafddsafsf\r\nadsffa";
    char *a = new char[100];
    int zero=0;
    int *of=&zero,r;
    r=strline(a,url,of);
    r=strline(a,url,of);
    r=strline(a,url,of);
    r=strline(a,url,of);
    if(r==-1){
        printf("OK\n");
    }
    printf("%d %d %s",r, *of, a);
    //char *iP=NULL; //注释这行就正确,r=-1,不注释就不正确,r=0
    delete a;
    return 0;
}

实际上,在注释那一行,不管我声明什么类型的指针,r都是等于0,正常情况下,r应该是等于-1的
------解决方案--------------------
VS2010下,注释了仍然是0
------解决方案--------------------
看下汇编调试内容。
------解决方案--------------------
我用的是VC++6.0,注释不注释结果都是一样的。
------解决方案--------------------
一宣言指针就不正常,百思不得其解楼主用的是什么编译器啊