PDA

Просмотр полной версии : [Вопрос] Компилятор "не видит" массив



KrutoyKrosch
13.03.2017, 04:30
Третий вопрос... Что-то совсем охренел...

Попал в очень интересную ситуацию... Вот такой код:


if(newkeys & KEY_NO)
{
for(new i; i < 10; i++)
{
if(!strlen(StartNPCName[i])) continue;

AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
TimerIDForNPC[i] = SetTimerEx("StartNPC", StartNPCTimeSpawn[i] + 1, 0, "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;, хотя этого быть не должно...

Массив вот так объявлен...


new
StartNPCName[5][10];

VVWVV
13.03.2017, 04:34
Магические числа - зло.


new
StartNPCName[5][10];


В коде лучше использовать оператор sizeof, либо константу.

KrutoyKrosch
13.03.2017, 04:39
Константу то и использую)) Поменял на числа что бы понятнее было.



#define MAX_NAME_NPC 5
#define MAX_NPC 10

new
StartNPCName[MAX_NAME_NPC][MAX_NPC];

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

AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
TimerIDForNPC[i] = SetTimerEx("StartNPC", StartNPCTimeSpawn[i] + 1, 0, "dd", AllIDNPC[i], i);
}
}


В чат то выводит нормально, вот почему только почему потом выход за массив...

VVWVV
13.03.2017, 04:41
Константу то и использую)) Поменял на числа что бы понятнее было.



#define MAX_NAME_NPC 5
#define MAX_NPC 10

new
StartNPCName[MAX_NAME_NPC][MAX_NPC];

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

AllIDNPC[i] = FCNPC_Create(StartNPCName[i]);
TimerIDForNPC[i] = SetTimerEx("StartNPC", StartNPCTimeSpawn[i] + 1, 0, "dd", AllIDNPC[i], i);
}
}


В чат то выводит нормально, вот почему только почему потом выход за массив...

Вы немного некорректно указали размеры массивов.



new
StartNPCName[MAX_NPC][MAX_NAME_NPC];

KrutoyKrosch
13.03.2017, 04:44
Разве так указывается? А почему тогда в консоль нормально выводит до 5 интерпретации

printf("%s\n", StartNPCName[i]);

offtop)0)0
https://pp.userapi.com/c638923/v638923947/28d67/ejGk-hhfn10.jpg

https://pp.userapi.com/c638923/v638923947/28d6e/J0Ak-5kX0LM.jpg

VVWVV
13.03.2017, 04:52
Разве так указывается?


Да.



offtop)0)0
https://pp.userapi.com/c638923/v638923947/28d67/ejGk-hhfn10.jpg

https://pp.userapi.com/c638923/v638923947/28d6e/J0Ak-5kX0LM.jpg

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

KrutoyKrosch
13.03.2017, 04:53
Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...

VVWVV
13.03.2017, 04:59
Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...

Хорошо.



new abc[5][10];

main()
{
abc[5] = "test";
}


Вам компилятор выдаст такую же ошибку.