Member 11112168 Ответов: 1

Из связанного ошибки в функции printf


В этом коде, когда я хочу напечатать результат, я получаю " незаконную запись, выходящую за пределы ошибки"


если входная строка короткая, она не дает ошибки.
если я удаляю идентификатор строки printf, он не дает ошибки.

Что я уже пробовал:

<pre>#define MIN3(a, b, c) ((a) < (b) ? ((a) < (c) ? (a) : (c)) : ((b) < (c) ? (b) : (c)))
static void levenshtein(char *s1, char *s2) {
      int x, y, s1len, s2len,similarity;
    s1len = strlen(s1);
    s2len = strlen(s2);
	printf("string1= %s \nstring2= %s \n",s1,s2);
      int matrix[s2len+1][s1len+1];
    matrix[0][0] = 0;

    for (x = 1; x <= s2len; x++)
        matrix[x][0] = matrix[x-1][0] + 1;
  for (y = 1; y <= s1len; y++)
        matrix[0][y] = matrix[0][y-1] + 1;
      for (x = 1; x <= s2len; x++)
        for (y = 1; y <= s1len; y++)
            matrix[x][y] = MIN3(matrix[x-1][y] + 1, matrix[x][y-1] + 1, matrix[x-1][y-1] + (s1[y-1] == s2[x-1] ? 0 : 1));
        similarity = matrix[s2len][s1len];
       printf("result = %d \n", similarity) ;  
}


static void
recv_uc(struct unicast_conn *c, const linkaddr_t *from)
{ 

printf("Request received from %d.%d: '%s'\n", from->u8[0], from->u8[1], (char *)packetbuf_dataptr());
numberofrecv = numberofrecv + 1; 

struct record *n; 

for(n = list_head(recv_record_list); n != NULL; n = n->next)
{ 
if(n->next == NULL){
printf("last record = %s \n",n->message );
levenshtein((char *)packetbuf_dataptr(),n->message);

}

}

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 11112168

Я думаю, что проблема заключается в размере входных строк

1 Ответов

Рейтинг:
0

OriginalGriff

Здесь вам поможет отладчик.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код, на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Мы не можем точно сказать вам, как это сделать - мы понятия не имеем, какие системы вы используете, - но быстрый поиск в Google названия вашей среды разработки и "отладчика" должен дать вам необходимую информацию.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Member 11112168

Спасибо за ваш ответ. Мне не нужно, чтобы вы отлаживали для меня. Я использую этот код в Cooja, и Гугл не поможет вам с программированием Contiki. Отладка в contiki не так проста, как вы думаете. Я подумал, что, может быть, кто-то еще столкнулся с этой проблемой и решил ее. Я не хочу, чтобы ты что-то делал для меня.

OriginalGriff

Затем вернитесь к старому способу и добавьте множество операторов трассировки-запишите, что происходит с файлом, и посмотрите, что происходит после его сбоя.

Проблема уникальна для вашего кода: никто еще не писал ничего подобного, поэтому отладка зависит только от вас...

Member 11112168

Спасибо, ваш ответ мне помог.

OriginalGriff

Пожалуйста!