Форум программистов
Реклама:
Контент-фильтр ИКС для учебных заведений.
Готовый набор правил для школ, фильтрация по спискам Роскомнадзора и Минюста. Соответствует ФЗ №436 и №139.
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 22.06.2012, 09:57   #1
vruleb
Новичок
 
Регистрация: 22.06.2012
Сообщений: 3
Репутация: 10
По умолчанию Крашится программа

Имеется такой вот код

Код:

#include <stdio.h>

char *F12(char **p[], int n)
{ int k,i,j;
for (k=i=0;p[i]!=NULL;i++)              //Перебор строк
    for(j=0;p[i][j]!=NULL;j++,k++)      //Подсчёт количества символов
        if (k==n) return(p[i][j]);      //Если кол-во символов в строке равно или больше n,                                            
    return(NULL);}                      //возвратить строку, иначе возвратить NULL
int main(){
    int n=4;
    char *k[2][20]={{"test1"},{"end"}}, **p;
    p=k[2];
    F12(&p, n);
}

Почему-то при его выполнении программа крашится в строке for(j=0;p[i][j]!=NULL;j++,k++) . Помогите найти в чём проблема.

Последний раз редактировалось vruleb; 22.06.2012 в 12:14.
vruleb вне форума   Ответить с цитированием
Старый 22.06.2012, 11:49   #2
Krok27
Участник клуба
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Адрес: Москва
Сообщений: 505
Репутация: 181
По умолчанию

Много недочетов.
Код:

p=k[3];

выход за пределы массива.
У тебя всего 2 элемента с индексами 0 и 1.
__________________
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума   Ответить с цитированием
Старый 22.06.2012, 12:13   #3
vruleb
Новичок
 
Регистрация: 22.06.2012
Сообщений: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Много недочетов.
Код:

p=k[3];

выход за пределы массива.
У тебя всего 2 элемента с индексами 0 и 1.
А, это я пока экспериментировал, в конце поставил k[3]. Со значением k[2]
ошибка тоже происходит.
vruleb вне форума   Ответить с цитированием
Старый 22.06.2012, 12:48   #4
Krok27
Участник клуба
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Адрес: Москва
Сообщений: 505
Репутация: 181
По умолчанию

тебя всего 2 элемента с индексами 0 и 1.

Код:

char* F12(char *p[], int n, int arraysize)
{
int i,j, k = 0;
	for( i=0 ; i < arraysize; i++) //Перебор строк
	{
		k = 0;
		for(j=0;p[i][j] != '\0';j++,k++)      //Подсчёт количества символов
		{
			if (k==n) return(p[i]); //Если кол-во символов в строке равно или больше n,
		}
	}
	return(NULL);
}                      //возвратить строку, иначе возвратить NULL

Код:

int main(int argc, char* argv[])
{
	char* p = 0;
	int n=4;
	char k[2][20]={{"end"}, {"test1"}};
	char *ptr[2] = {0}; 
	int i;
	for(i=0;i < 2;i++)
		{
			ptr[i] = &k[i];
		}

	F12(ptr, n,2);

	return 0;
}

__________________
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Stilet; 22.06.2012 в 20:43.
Krok27 вне форума   Ответить с цитированием
Старый 22.06.2012, 15:33   #5
vruleb
Новичок
 
Регистрация: 22.06.2012
Сообщений: 3
Репутация: 10
По умолчанию

Спасибо конечно, но в том-то и загвоздка, что саму функцию F12 менять нельзя, а только вызов функции.
vruleb вне форума   Ответить с цитированием
Старый 22.06.2012, 21:39   #6
Dizelektwo
Форумчанин
 
Регистрация: 05.04.2012
Сообщений: 56
Репутация: 10
По умолчанию

Код:

void F12( char* str[], int limit, int strNum) {
	
int i=0,m=0,count=0,sumStr=1;	

do
 {
    count++; //подсчет букв
    if(m==strlen(str[i])-1 && i<strNum) { //если прочитана вся строка и массив не заканчивается последней строкой
        i++;  //переходим к следующей строке
	m=-1; //ставим счетчик следующий строки в ее начало
	sumStr++; //число строк
}
m++;
 }
 while(m!=strlen(str[i]));

 double razn=count/sumStr;
 cout << "String: " << sumStr << endl; //число строк
 cout << "Simbols: " << count << endl; //общее число символов
 cout << "Normal arifmetic: " << razn << endl; //сред.арифметический объем строк
}

int main() {

int limit=5; //лимит символов для условия сравнения
int strNum=2; //число строк
char *strDump[]={"hello","my","darling"};

F12(strDump,limit,strNum);
system("pause");
return 0;
}

Достаточно только добавить нужное условие. Минимум извращений со ссылками

Последний раз редактировалось Dizelektwo; 22.06.2012 в 22:30.
Dizelektwo вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56




02:19.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru