簡體   English   中英

使用atoi()函數進行C ++訪問沖突

[英]C++ Access Violation with atoi() function

#include "stdafx.h"
#include <list>
#include <iostream>
#include <string>
using namespace std;

class Canvas
{
public:
    void CleanCanvas(Canvas * Canvas);
    int canvas[10][10];
    void setCoords(int X,int Y,bool run);
    bool Win(Canvas * Canvas,string * WinningPlayer);
}CANVAS;

int _tmain(int argc, _TCHAR* argv[])
{
    string coords;
    string temp;
    int X,Y;
    bool flag = true;
    bool run = false;
    string  WinningPlayer = "";
    system("color 02");
    printf("------------------------------//TIC-TAC-TOE//------------------------\n\n\n\n\n");
    printf("          ***********************************************           \n\n\n");
    printf("Example: player1- 3,3 to put a mark on 3 line of the 3 column\n\n\n\n\n\n");
    CANVAS.CleanCanvas((Canvas*)&CANVAS.canvas);
    cin.get();
    while(flag)
    {
        printf("player1 make the mov: "); 
        cin >> coords;
        X = atoi((char *)coords.at(0));
        Y = atoi((char *)coords.at(2));
        if(CANVAS.canvas[X][Y] != 0)
        {
            printf("Coords alrady taken...set new");
            cin >> coords;
            X = coords.at(1);
            Y = coords.at(3);
        }
        run = false;
        CANVAS.setCoords(X,Y,run);
        if(CANVAS.Win((Canvas*)&CANVAS.canvas,&WinningPlayer) == true)
        {
            printf("%s Win",WinningPlayer);
            flag = false;
        }

        printf("player2 make the mov: ");
        cin >> coords;
        X = coords.at(1);
        Y = coords.at(3);
        if(CANVAS.canvas[X][Y] != 0)
        {
            printf("Coords alrady taken...set new");
            X = coords.at(1);
            Y = coords.at(3);
        }

    } 

    cin.get();
    return 0;

}

void Canvas::setCoords(int X,int Y,bool run)
{
    if(run == false)
    {
        CANVAS.canvas[X][Y] = 1;
    }else
    {
        CANVAS.canvas[X][Y] = 2;
    }
}

void Canvas::CleanCanvas(Canvas * Canvas)
{
    for (int i = 0; i <= 3; i++)
    {
        for(int a = 0; a <= 3; a++)
        {
            Canvas->canvas[i][a] = 0;
        }
    }
}

bool Canvas::Win(Canvas * Canvas,string * WinningPlayer)
{
    int count = 0;
    for(int i = 0; i <= 3; i++)
    {
        for(int a = 0; a <= 3; a++)
        {
            switch(Canvas->canvas[i][a])
            {
            case 1: count +=1;
                break;
            case 2: count *=2 + 1;
                break;
            }
            if(count == 9)
            {
                WinningPlayer = (string *)"player2";
                return true;
            }else if (count == 3)
            {
                WinningPlayer = (string *)"player1";
                return true;
            }
        }
    }
}

上面的代碼給了我一個訪問違規,我看到來自

X = atoi((char *)coords.at(0));
Y = atoi((char *)coords.at(2));

我試圖在一個temporany變量中施放coords.at但是它不起作用不要看代碼,因為它只是一個鏡頭所以它不應該處理異常...我需要幫助來弄清楚真實的prblem是...謝謝!

coords.at(0)返回一個char ,而不是char* 嘗試首先解析你的std :: string,將每個數字轉換為char* ,然后使用atoi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM