zoukankan      html  css  js  c++  java
  • 【面试易错题】陷阱题集一

    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是无用的。



  • 相关阅读:
    M1阶段的开发过程的一些反思
    Alpha版本发布说明
    Alpha版本BUG BASH
    Notes of Daily Scrum Meeting(11.19)
    Notes of Daily Scrum Meeting(11.17)
    Notes of Daily Scrum Meeting(11.15)
    Notes of Daily Scrum Meeting(11.14)
    flask_sqlalchemy介绍
    SQLAlchemy 简单笔记
    Python-3.6 安装pycrypto 2.6
  • 原文地址:https://www.cnblogs.com/xhyzjiji/p/6159364.html
Copyright © 2011-2022 走看看