开发者

c++ switch access violation

what i'm writing is simple, well, it should be, but i'm getting this error and i don't know what else to do, my code look like this

int main()
{
    char *option;

    while(strcmp(option,"exit")!=0){

        int opt = GetSystemDefaultUILanguage();
        std::string lang;
        switch(opt)
        {
            case 3082:
                    lang = "number 3082";
                    break;
            case 1033:
                    lang = "number 1033";
                    break;
        }
        std::cout<<lang<<'\n';
        std开发者_运维问答::cin>>option;
    }

}

when i compile it there isn't errors, but when i run it, i get a this error

Project xxxx raised exception class EAccessViolation with message 'Access violation at address zzzzz'.Process stopped. Use Step or Run to continue.

EDITED:

This is my full code, now is more simple, but still the same result.

even if i try with an if/else statement it wont work, need some help here, thanks


Your program will always get an access violation because of the following lines:

char *option;

while(strcmp(option,"exit")!=0){

std::cin>>option;

You never initialize the pointer option, but then try to use it. Change your code to this:

int main()
{
    std::string option;

    while(option != "exit")
    {
        int opt = GetSystemDefaultUILanguage();
        std::string lang;
        switch(opt)
        {
            case 3082:
                    lang = "number 3082";
                    break;
            case 1033:
                    lang = "number 1033";
                    break;
        }
        std::cout<<lang<<std::endl;
        std::cin>>option;
    }
}


I can't tell you the cause of the specific run-time error you're seeing, but I call tell you what's wrong with your program: hardcoded paths to user directories. Localized names are just one of a myriad of things that can go wrong with trying to guess the paths yourself.

DON'T DO THAT. Instead, read environment variables or call Shell APIs to find out where this particular user wants temporary data stored (or documents, pictures, desktop icons, etc).

Have a look at getenv("TEMP") and ShGetSpecialFolderPath


Your problem is this line:

   std::cin>>option;

The variable option is declared as an uninitialized pointer to a character. Thus in the above statement, you are reading data into an unknown location.

Why do you use C style strings (char *) and C++ std::string? You should get rid of C style strings (unless they are constant). Try this:

#include <iostream>
#include <string>

int main(void)
{
  std::string option;
  do
  {
     std::cout << "Type exit to end program." << std::endl; // endl will flush output buffer
     std::getline(cin, option);  // Input a text line into "option".
  } while (option != "exit");  // C-style string, used as a constant.
  return 0;
}


You wrote

BlockquoteProject xxxx raised exception class EAccessViolation with message 'Access violation at address zzzzz'.Process stopped. Use Step or Run to continue.

So why don't you pause your program before crash, go to the location and put a breakpoint? If you still can't cope with that than upload your code to a filesharing server and give us the link ;)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜