指针例题详解

    xiaoxiao2021-03-25  127

    void test2()    {    char string[10], str1[10];    int i;    for(i=0; i<10; i++)    {    str1= 'a';    }    strcpy( string, str1 );    }

    错误: 链接:https://www.nowcoder.com/questionTerminal/f8209ee66a1b43158ebdec8814b0cdfb?orderByHotValue=1&done=0&pos=20&onlyReference=false 来源:牛客网

    第一,数组越界访问。 第二,数组名不能坐左值直接进行赋值, 第三,strcopy函数的字符串复制是只有遇到\0才停止,而str1中没有\0,所以复制的长度不确定。 第四,string和str1由于是在函数内定义,不是全局变量,所以数组内初始值不确定,strcpy复制操作具有不确定性

    void GetMemory( char *p )    {    p = (char *) malloc( 100 );    }    void Test( void )    {    char *str = NULL;    GetMemory( str );    strcpy( str, "hello world" );    printf( str );    }

    传入中 GetMemory( char *p ) 函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完    char *str = NULL;    GetMemory( str );   后的 str 仍然为 NULL

    char *GetMemory( void )    {    char p[] = "hello world";    return p;    }    void Test( void )    {    char *str = NULL;    str = GetMemory();    printf( str );    }

    错误:p是局部变量,函数返回,内存就已释放

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

    错误:未判断内存是否申请成功,应加上:    if ( *p == NULL )    {    …// 进行申请内存失败处理

       }    同时Test 函数中也未对 malloc 的内存进行释放。

    swap( int* p1,int* p2 )    {    int *p;    *p = *p1;    *p1 = *p2;    *p2 = *p;    }

      在 swap 函数中, p 是一个 “ 野 ” 指针,有可能指向系统区,导致程序运行的崩溃。在 VC++ 中 DEBUG 运行时提示错误 “Access Violation” 。该程序应该改为

    swap( int* p1,int* p2 )    {    int p;    p = *p1;    *p1 = *p2;    *p2 = p;    }
    转载请注明原文地址: https://ju.6miu.com/read-15963.html

    最新回复(0)