指针例题详解

来源:互联网 发布:sql注入绕过安全狗 编辑:程序博客网 时间:2024/05/01 11:00
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;   }
0 0
原创粉丝点击