Просмотр полной версии : [Вопрос] Компилятор "не видит" массив
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];
Магические числа - зло.
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);
}
}
В чат то выводит нормально, вот почему только почему потом выход за массив...
Константу то и использую)) Поменял на числа что бы понятнее было.
#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
Разве так указывается?
Да.
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
Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...
Почему же тогда нормально в консоль выводиться что в массиве если я не правильно указал...
Хорошо.
new abc[5][10];
main()
{
abc[5] = "test";
}
Вам компилятор выдаст такую же ошибку.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot