#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 отлично компилится и работает.
Я прекрасно понимаю как от этого ибавиться (не надо подобных комментов)
Это указатель. Ты хоть можешь написать p=0; Главное, чтобы потом ничего не записал в то место куда "указывает указатель".
ясно, спасибо
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); // Удаление массива - используется указатель на начало
pItem = pStart = (float*) calloc (siseof (float), n); // Выделение памяти под массив
for(int i=0; i< n; i++)
*pItem++ = i; // Присвоение значения элементу массива и переход к следующему
free (pStart); // Удаление массива - используется указатель на начало
вобще-то, я так примерно и делаю, просто пример пытался сделать по-проще, вот и облажался