[英]Access violation reading location C++ char vector
我是 C++ 新手,我在使用這種新語言時遇到了一些問題 :) 我找不到我在內存中無法正常工作的地方,因為我從未使用過不管理內存的語言通過它自己。 我希望有一個人可以幫助我。
錯誤是“訪問沖突讀取位置”。
抱歉我的英語不好,我是烏拉圭人。
dopartial: test edx,1 jz short doword ***mov al,[edx]*** //here i get the error
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,這會將指針移動到數組的第二個元素。
你的數組不是從0
到largo+1
,而是從1
到largo
。 實際上,您的數組只有兩個元素。 這很可能是您問題的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.