Переменная C внезапно взрывается
Я столкнулся со странной проблемой из-за довольно простого куска кода. Соответствующая часть кода приведена ниже:
void foo(int32 in_sd_id, int32 out_sd_id)
{
int32 nsds; /* number of data sets in the file */
int32 nattr; /* number of global attributes in the file */
int32 attr_cnt; /* count of number of attribute */
int32 attr_index; /* attribute index */
int32 attr_type, attr_size; /* attribute type and size */
char attr_name[40];
ret = SDfileinfo(in_sd_id, &nsds, &nattr);
printf("nattr is %d\n", nattr);
/* test to see if num_datasets and num_global_attr can be retrieved from in_sd_id */
if (ret == -1)
{
fprintf(stdout, "cannot read information from input file \n");
exit(EXIT_FAILURE);
}
else
{
/* loop through each global attributes */
for (attr_index=0; attr_index<nattr; attr_index++)
{
printf("attr_index:nattr is %d:%d\n", attr_index, nattr);
/* test to see if the file or dataset do indeed contain attributes */
if (SDattrinfo(in_sd_id, attr_index, attr_name, &attr_type, &attr_cnt) == FAIL)
fprintf(stdout, "Cannot read information for attribute %d\n", attr_index);
else
{
DO SOMETHING
}
}
}
}
Проблема с nattr
переменная. Скажи например nattr
должно быть 11
в пределах for
цикл, когда я печатаю значение nattr
Я понимаю как 11
на какое-то время, но потом вдруг он взорвется до огромного числа, как 1869501279
, Я ничего не делаю с этим nattr
переменная в остальной части кода. Я проверил это дважды. Поэтому я не уверен, почему он взорвался внезапно. Оператор отладки из одного примера запуска приведен ниже:
nattr is 11
attr_index:nattr is 0:11
attr_index:nattr is 1:11
attr_index:nattr is 2:11
attr_index:nattr is 3:11
attr_index:nattr is 4:11
attr_index:nattr is 5:11
attr_index:nattr is 6:11
attr_index:nattr is 7:11
attr_index:nattr is 8:1869501279
attr_index:nattr is 9:1850957672
attr_index:nattr is 10:1850957672
attr_index:nattr is 11:1850957672
Cannot read information for attribute 11
attr_index:nattr is 12:1850957672
Cannot read information for attribute 12
attr_index:nattr is 13:1850957672
Любая помощь относительно того, что может происходить здесь. Спасибо
1 ответ
Возможно, у вас (очень) переполнение буфера. Могу поспорить, что вы пытаетесь написать attr_name
к индексам больше чем 39
,
Но не просто увеличивайте размер attr_name
, Вы должны понимать, что вы делаете в // DO SOMETHING
код.