使用指针访问违规写入位置

时间:2014-06-14 14:16:08

标签: c++ class access-violation

我正在创建一个程序,将单词的第一个字母放在单词的后面,以便#34; Word"会成为" ordW"我做得很好但是当我决定把这个功能放到一个它不起作用的类中时,我得到访问冲突写入位置我根本不知道它有什么问题,我将展示课程代码和原始代码:

班级代码:

void Checking::test(char* first,char* buffer){
back = first;
if (first != buffer + strlen(buffer) - 1){
    ++back;
    temp = *first;
    *first = *back;
    *back = temp;

    ++first;
    test(first, buffer);
}
}

注意:变量" back"和" temp"在类标题中声明如下:

Char* back = NULL;
Char temp = NULL;

原始代码:

void test(char* first, char* buffer){
char* back = first;
if (first != buffer + strlen(buffer) - 1){
    ++back;
    char temp = *first;
    *first = *back;
    *back = temp;

    ++first;
    test(first, buffer);
}
}

我不知道为什么在使用相同的功能但在一个类中时出现错误。如果有人发现错误,他们可以解释我为什么会收到错误以及如何修复,谢谢。

1 个答案:

答案 0 :(得分:0)

我认为有一个错字

Char* back = NULL;
Char temp = NULL;

应该至少有

char* back = NULL;
char temp = NULL;

关键字char是用小写字母c。

编写的

至于你的功能是否有效。在调用函数之前,您应该首先检查缓冲区的值。例如,如果首先指向终止零,那么这个条件

if (first != buffer + strlen(buffer) - 1){

将等于true,结果将与您的结果相同。

此外,我认为在函数外定义back和temp没有任何意义。

考虑到您可以使用标准算法std::rotate

我会按以下方式编写成员函数

void test( char* buffer ) const
{
   if ( *buffer && *++buffer )
   {
      char c = *buffer;
      *buffer = *( buffer - 1 );
      *( buffer - 1 ) = c;

      test( buffer );
   }
}

它更有效,更简单,因为它只有一个参数,每次都不会调用std::strlen