• 【面试易错题】陷阱题集一


    1.【OJ】设计一个函数sum(n)=1+2+...+n,假设sum(n)不超过整型数表示范围。

    错误解法:

    int sum(n){
        int ans;
        ans = n*(n+1)/2;
        return ans;
    }
    错误在于:n*(n+1)时可能已经超出了整型数的表示范围,造成溢出错误。

    int sum(n){
        if(n%2)
            return (n+1)/2*n;
        else
            return n/2*(n+1);
    }

    2.【美图】请写出下面程序的运行结果。

    void func(void){
        char *dst;
        dst = (char*)malloc(sizeof(char)*1024);
        strcpy(dst, "Hello");
        free(dst);
        if(dst!=NULL){
            strcpy(dst, "World");
        }
        printf("%s", dst);
    }
    易错之处:

    ①free后只是将堆空间交还给系统,并不对指针变量dst和dst所指向的内存空间内容进行修改;

    ②free后的dst指针是野指针,如果系统在free后占用dst所指空间,那么对dst的操作将产生错误,如果系统并没占用dst所指空间,操作是成功的,但是隐患很大。

    所以上面代码运行结果可能为:程序出错,非法访问内存;输出World字样。

    3.【美图】请指出下面程序的错误。

    char* func(char *s, int len){
        char dst[1024];
        memcpy(dst, s, len);
        return dst;
    }
    易错之处:

    ①memcpy与strcpy不同,memcpy严格按照指定参数len来复制字节数,所以这里可能会遗漏''字符串结束符,导致错误;

    ②dst为局部变量,当函数返回时,dst所指向的1024个字节空间将被释放(退栈),所返回的dst指针指向的内容会被其他内容所覆盖,所以返回的dst是无用的。



  • 相关阅读:
    MySQL server version for the right syntax to use near ‘USING BTREE
    随笔
    [python]自问自答:python -m参数?
    [linux]查看linux下端口占用
    [linux]scp指令
    [编程题目]泥塑课
    How can I learn to program?
    [python]在场景中理解装饰器
    [前端]分享一个Bootstrap可视化布局的网站
    [python]python元类
  • 原文地址:https://www.cnblogs.com/xhyzjiji/p/6159364.html
Copyright © 2020-2023  润新知