Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±

    Компилятор "не видит" массив

    Третий вопрос... Что-то совсем охренел...

    Попал в очень интересную ситуацию... Вот такой код:
    PHP код:
    if(newkeys KEY_NO)
        {
            for(new 
    i10i++)
            {
                if(!
    strlen(StartNPCName[i])) continue;

                
    AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
                
    TimerIDForNPC[i] = SetTimerEx("StartNPC"StartNPCTimeSpawn[i] + 10"dd"AllIDNPC[i], i);
            }
        } 
    Вот такое сообщение:
    Код:
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Attempted to read/write array element at index 5 in array of size 5
    Ругается на строку if(!strlen(StartNPCName[i])) continue;, хотя этого быть не должно...

    Массив вот так объявлен...
    PHP код:
    new
        
    StartNPCName[5][10]; 

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Магические числа - зло.
    Код:
    new 
        StartNPCName[5][10];
    В коде лучше использовать оператор sizeof, либо константу.

  3. #3
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Константу то и использую)) Поменял на числа что бы понятнее было.

    PHP код:
    #define MAX_NAME_NPC                    5
    #define MAX_NPC                         10

    new
        
    StartNPCName[MAX_NAME_NPC][MAX_NPC];

    if(
    newkeys KEY_NO)
        {
            for(new 
    iMAX_NPCi++)
            {
                
    printf("%s\n"StartNPCName[i]);
                if(!
    strlen(StartNPCName[i])) continue;

                
    AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
                
    TimerIDForNPC[i] = SetTimerEx("StartNPC"StartNPCTimeSpawn[i] + 10"dd"AllIDNPC[i], i);
            }
        } 
    В чат то выводит нормально, вот почему только почему потом выход за массив...

  4. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    Константу то и использую)) Поменял на числа что бы понятнее было.

    PHP код:
    #define MAX_NAME_NPC                    5
    #define MAX_NPC                         10

    new
        
    StartNPCName[MAX_NAME_NPC][MAX_NPC];

    if(
    newkeys KEY_NO)
        {
            for(new 
    iMAX_NPCi++)
            {
                
    printf("%s\n"StartNPCName[i]);
                if(!
    strlen(StartNPCName[i])) continue;

                
    AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
                
    TimerIDForNPC[i] = SetTimerEx("StartNPC"StartNPCTimeSpawn[i] + 10"dd"AllIDNPC[i], i);
            }
        } 
    В чат то выводит нормально, вот почему только почему потом выход за массив...
    Вы немного некорректно указали размеры массивов.

    PHP код:
    new
        
    StartNPCName[MAX_NPC][MAX_NAME_NPC]; 

  5. Пользователь сказал cпасибо:
    KrutoyKrosch (13.03.2017)
  6. #5
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Разве так указывается? А почему тогда в консоль нормально выводит до 5 интерпретации
    Код:
    printf("%s\n", StartNPCName[i]);
    offtop)0)0



    Последний раз редактировалось KrutoyKrosch; 13.03.2017 в 04:47.

  7. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    Разве так указывается?
    Да.

    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    offtop)0)0



    Спать хочется...

  8. #7
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...

  9. #8
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...
    Хорошо.

    Код:
    new abc[5][10];
    
    main()
    {
    	abc[5] = "test";
    }
    Вам компилятор выдаст такую же ошибку.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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