Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
646 views
in Technique[技术] by (71.8m points)

c++ - Access violation writing location when working with pointers to char

I am writing a very simple program that removes duplicate chars from a string. I ran it visual studio and got the error:

Unhandled exception at 0x00d110d9 in inteviews.exe: 0xC0000005: Access violation writing location 0x00d27830.

I really don't see what the problem is. current cell gets the value of the next cell.

void remove(char *str, char a) {
    while (*str != '') {
        if (*(str+1) == a) {
            remove(str + 1, a);
        }

        *str = *(str +1 );//HERE I GET THE ERROR
        ++str;
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    char *str = "abcad";

    while (*str != '') {
        remove(str,*str);
        str++;
    }

    std::cout << str << std::endl;

    return 0;
}

EDIT:

I already tried to change it to char str[] = "abcad" but I still get the same error.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You're attempting to modify a string literal. You can't do that.

char *str = "abcad";

That's a string literal. It's created in read-only memory therefore attempting to write to it is an access violation.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...