GetMemory的几个笔试题 面试碰到两次

来源:互联网 发布:淘宝小风悦萌怎么样 编辑:程序博客网 时间:2024/05/12 18:45

    看来得重新温习一下c语言的基础知识了

Getmemory的几个经典的关于内存的笔试题还是经常能考到的

void GetMemory1(char *p)
{
    p = (char *)malloc(100);
}

void Test1(void)
{
    char *str = NULL;
    GetMemory1(str);
    strcpy(str, "hello world");
    printf(str);
}
//str一直是空,程序崩溃
char *GetMemory2(void)
{
    char p[] = "hello world";
    return p;
}
void Test2(void)
{
    char *str = NULL;
    str = GetMemory2();
    printf(str);
}

char *GetMemory3(void)

    return "hello world";
}
void Test3(void)
{
    char *str = NULL;
    str = GetMemory3();
    printf(str);
}

//Test3 中打印hello world,因为返回常量区,而且并没有被修改过。Test2中不一定能打印出hello world,因为指向的是栈。

void GetMemory4(char **p, int num)
{
    *p = (char *)malloc(num);
}
void Test4(void)
{
    char *str = NULL;
    GetMemory3(&str, 100);
    strcpy(str, "hello");
    printf(str);
}

//内存没释放

void Test5(void)
{
    char *str = (char *) malloc(100);
    strcpy(str, "hello");
    free(str);
    if(str != NULL)
 {
  strcpy(str, "world");
  printf(str);
 }
}
//str为野指针,打印的结果不得而知

void Test6()
{
    char *str=(char *)malloc(100);
    strcpy(str, "hello");
    str+=6;
    free(str);
    if(str!=NULL)
    {
        strcpy(str, "world");
        printf(str);
    }
}
//VC断言失败,运行错误

0 0