C++

программирование С++ access violation

всем привет

char** split(char* chzStr, int nLength, const char* chzSpliters, int* nCnt) {
*nCnt = 0;

int nMaxArrLn = nLength/2;
char** Result = (char**)malloc(nMaxArrLn);
for (int i = 0; i < nMaxArrLn; i++) {
Result[i] = (char*)malloc(nLength);
Result[i] = "";
}

bool bInWord = false;
int nWordIdx = 0;
while(*chzStr){
if (IsCharSeparator(*chzStr, chzSpliters)) {
if (bInWord) {
bInWord = false;
if (*nCnt++ >= nMaxArrLn) {
break;
}
}
} else {
bInWord = true;
Result[*nCnt] = "test";
Result[*nCnt][nWordIdx++] = *chzStr; // вот тут валиться access violation
}
chzStr++;
}
return Result;
}

на строке Result[*nCnt][nWordIdx++] = *chzStr;
хотя если дебажить и вынести сроку в "Watch" MSVS 2008 то присвоение нормально происходит можно увиеть как строка изменяеться

внимание вопрос: какого фига так происходит

Примечание:
не записывает символ в строку

Примечание:
сори фигово поставил вопрос
есть функция которая должна разбивать строку на массив строк
вот код (почистил лишнее)

char** split(char* chzStr, int nLength, const char* chzSpliters, int* nCnt) {
*nCnt = 0;
int nMaxArrLn = nLength/2;
char** Result = (char**)malloc(nMaxArrLn);
for (int i = 0; i < nMaxArrLn; i++) {
Result[i] = (char*)malloc(nLength);
Result[i] = "";
}

int nWordIdx = 0;
while(*chzStr){
Result[*nCnt] = "test";
Result[*nCnt][nWordIdx++] = '1';// вот тут валиться access violation
chzStr++;
}
return Result;
}

Примечание:
вот код функции IsCharSeparator хотя я не знаю чем поможет
разве запоститьн а гавнокод.ру :)

bool IsCharSeparator(char cStr, const char* chzSpliters) {
while(*chzSpliters) {
if (cStr == *chzSpliters++) {
return true;
}
}
return false;
}

Примечание:
проблема с двумерноостю массива в просттую строку типа char[] запихивает нормально
но я только изучаю С++ поетому не могу понят в чем проблема

Примечание:
Keres нет я под дебагом смотрю там сразу на 0 падает

Примечание:
Keres спасибо исправлю и запомню

Примечание:
Keres спасибо большое
Ответы:
что прога не так делает?
ты вроде в клеику масива пытаешься строку запихать
и [*nCnt] мне не очень нравится
я правда на С++ никогда не писал
Выложи еще текст функции IsCharSeparator.
nWordIdx за границу массива не выходит?
Result[i] = (char*)malloc(nLength);
заменить на
Result[i] = (char*)malloc((nLength + 1) * sizeof(char));
+1 для \0 в конце строки. *sizeof(char) - для культуры программирования, мало ли на какой системе работать придется
Строковые литералы так присваивать нельзя!
Убери строки:
Result[i] = "";
и
Result[*nCnt] = "test";
Это во-первых.
Result[*nCnt] = "test";
Result[*nCnt][nWordIdx++] = '1';// вот тут валиться access violation


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.