我是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;
}
答案 0 :(得分:3)
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
。实际上,你的数组是两个元素。这很可能是你问题的根源。