C++ 使用指针访问冲突写入位置

C++ 使用指针访问冲突写入位置,c++,class,access-violation,C++,Class,Access Violation,我正在创建一个程序,将单词的第一个字母放在单词的后面,这样单词就会变成ordW,我做得很好,但是当我决定将函数放入一个类时,它不起作用,我得到了访问冲突写入位置,我根本不知道它有什么问题,我将显示类代码和原始代码: void test(char* first, char* buffer){ char* back = first; if (first != buffer + strlen(buffer) - 1){ ++back; char temp = *first; *

我正在创建一个程序,将单词的第一个字母放在单词的后面,这样单词就会变成ordW,我做得很好,但是当我决定将函数放入一个类时,它不起作用,我得到了访问冲突写入位置,我根本不知道它有什么问题,我将显示类代码和原始代码:

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);
}
}
类别代码:

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);
}
}

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

我认为是打字错误

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。

在这种情况下,我将使用调试器。Char temp=NULL;。为什么要这样做?类中如何声明test?void testchar*first,char*buffer;像这样@launeYou基本上是在改造std::rotate的一部分。使用std::rotate。