访问冲突读取位置c++字符向量

Access violation reading location C++ char vector

本文关键字:字符 向量 c++ 位置 读取 访问冲突      更新时间:2023-10-16

我是c++的新手,我对这种新语言有一些问题:)我找不到我的记忆不好的地方,因为我从来没有使用过一种不能自己管理记忆的语言。我希望有人能帮助我。

错误是"访问违规读取位置"。

抱歉我的英语不好,我是乌拉圭人。

<>之前dopartial:测试edx, 1简写***mov,[edx]***//这里我得到了错误之前
int CalcularCantPalabras(char* str, int largo, char* delimitador){          
    int largo_VectorRetorno = 0;
    char *palabra_cortada =  new char[largo]+1;
    strcpy_s(palabra_cortada ,largo+1,str);
    palabra_cortada = strtok(palabra_cortada,delimitador);
    while( palabra_cortada!= NULL ){
        palabra_cortada = strtok(NULL,delimitador);
        largo_VectorRetorno++;
    }   
    return largo_VectorRetorno;
}

char** splitStr(char* str, char separador, int &largoRet){
    char *delimitador = new char[1];
    delimitador[0] = separador;
    int largo_string = strlen(str);
    char* str_copia = new char[largo_string];
    strcpy_s(str_copia,largo_string+1,str);
    int largo_VectorRetorno = CalcularCantPalabras(str_copia,largo_string,delimitador);
    char ** VectorRetorno = new char*[largo_VectorRetorno];
    largoRet = largo_VectorRetorno;
    int posicion_vec_retorno = 0;
    str_copia = strtok(str_copia-1,delimitador);
    VectorRetorno[posicion_vec_retorno] = str_copia;
    posicion_vec_retorno = posicion_vec_retorno+1;
    while( str_copia!= NULL && posicion_vec_retorno<largo_VectorRetorno){
        posicion_vec_retorno++;
        str_copia = strtok(NULL,delimitador);
        VectorRetorno[posicion_vec_retorno] = str_copia;    
    }
    return VectorRetorno;
}
char *palabra_cortada =  new char[largo]+1;

应该是:

char *palabra_cortada =  new char[largo+1];

因为+1[]之外,所以它对数组的大小没有影响。所以largo是大小,而不是largo+1。然后你就会受到双重打击。执行new char[largo]并给出指向数组第一个元素的指针。然后不小心加了1,这将指针移动到数组的第二个元素。

数组不是从0largo+1,而是从1largo。实际上,你的数组只有两个元素。