Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выход за пределы массива (операция ++)

18K
14 октября 2006 года
anxieux
12 / / 14.10.2006
Корректно ли это:
Код:
#include <stdlib.h>

int main()
{
  int i, n = 22;
  float *p;
  p=(float*)malloc(n*sizeof(float));
  for(i=0; i<n; i++) {
    *p = i;
    p++;
  }
  free(p);
  return 0;
}

Если кто не понял: проблема в том, что последний раз p++ вылезает за границу выделенной памяти.
Кстати,в MV и BC отлично компилится и работает.
Я прекрасно понимаю как от этого ибавиться (не надо подобных комментов)
4
14 октября 2006 года
mike
3.7K / / 01.10.2002
Это указатель. Ты хоть можешь написать p=0; Главное, чтобы потом ничего не записал в то место куда "указывает указатель".
18K
14 октября 2006 года
anxieux
12 / / 14.10.2006
ясно, спасибо
309
16 октября 2006 года
el scorpio
1.1K / / 19.09.2006
[QUOTE=anxieux]
float *p;
p=(float*)malloc(n*sizeof(float));
for(i=0; i<n; i++)
{
*p = i;
p++;
}
free(p);
}
[/QUOTE]
Что за бред :eek: ? И что, по вашему мнению, должно быть удалено командой free :D ???
Ежели в лом использовать индексацию указателя - ваше право. Но указатель на начало массива теряется безвозвратно. Правильнее будет так
 
Код:
float *pStart, *pItem;
pItem = pStart = (float*) calloc (siseof (float), n); // Выделение памяти под массив
for(int i=0; i< n; i++)
    *pItem++ = i; // Присвоение значения элементу массива и переход к следующему
free (pStart); // Удаление массива - используется указатель на начало
18K
16 октября 2006 года
anxieux
12 / / 14.10.2006
вобще-то, я так примерно и делаю, просто пример пытался сделать по-проще, вот и облажался
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог