Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.168.172] |
|
Сообщ.
#1
,
|
|
|
Не выполняется перераспределение памяти :-((
Есть код: Сначала заполняется массив arTxt. Необходимо его заполнять с помощью malloc, realloc и strcpy. char **arTxt; arTxt= new char *[cntRows]; // любое , например 3 int row=0, i=0; arTxt[0]=(char*)malloc(1); strcpy(arTxt[0],""); printf ("\n ______Введите текст______\n"); while (1) { unsigned char sm; cscanf("%c",&sm); if (sm==13) { printf("\n"); row++; i=0; if (row==cntRows) break; else { arTxt[row]=(char*)malloc(1); strcpy(arTxt[row],""); } } else { arTxt[row]=(char*)realloc(arTxt[row], i+1); char *newS=" "; newS[0]=sm; strcpy( &arTxt[row][i], newS); i++; } } Потом в конец каждого arTxt[row] добавить некоторую строку entrWrd for (i=0; i<cntRows; i++) { int len1=strlen(arTxt[i]), len2=strlen(entrWrd); arTxt[i]=(char*)realloc(arTxt[i], len1+len2); //!!! На этой строке программа виснет глухо в 90% случаев. strcat(arTxt[i], entrWrd); } Может быть распределение памяти делаю не так??? Помогите. |
Сообщ.
#2
,
|
|||
|
До конца прогу не разбирал, но вот здесь у тебя глюк:
У тебя получается, что newS - строка-константа. И присваивание следующей строкой не сработает. Странно, что тебе компилятор за это по шапке не дал. В общем, правь на char newS[10] = {' ', 0}; На будущее - куски кода, тем более такие большие, рекомендуется обрамлять тегами [ CODE ] здесь код [ /CODE ] (пробелы убрать, большие буквы обязательно). |
Сообщ.
#3
,
|
|
|
Эту строку надо вот так:
arTxt[row]=(char*)realloc(&arTxt[row], (i+1)*sizeof(char)); потом, как было уже замечено, надо сделать newS = new char; Здесь ты просто пишешь строку newS в невыделенный кусок памяти. Ты же еще не выделил память под arTxt[row][i]: strcpy( &arTxt[row][i], newS); - это вот сдесь - пишешь туда, не понятно куда Ну и все. Когда доходит до твоего места, где все виснет и вылетает, то и размер строки не может узнать int len1=strlen(arTxt[i]),... и перераспределить память не может, т.к. надо вот так arTxt[i]=(char*)realloc(&arTxt[i], len1+len2) Напиши правильный небольшой код. На нем "научись" работать с выделением память, а потом пиши такой, что бы ошибок было по меньше. |
Сообщ.
#4
,
|
|
|
А еще лучше потрать немного времени на изучение STL.
В частности на работу с векторами. |