Поробовал так как ты советовал но возник непонятный глюк
- Код: Выделить всё
typedef struct _DSmall_test
{
BYTE Id;
BYTE day;
}
DS_test_t;
//////////////////////
DS_test_t *Test2;
//////////////////////
void TestPointerArray(void)
{
BYTE i,N;
DS_test_t *Test1;
N=10; //количество элементов массива
////////////////////////////////////////////
//Выделяем память под массив Test1
Test1 = calloc(N,sizeof(DS_test_t));
//Заполняем его
for (i=0;i<N;i++) Test1[i].Id=i;
//Выводим на экран
for (i=0;i<N;i++) printf("%d,",Test1[i].Id);
///////////////////////////////////////////
//Выделяем память под массив Test2
Test2 = calloc(N,sizeof(DS_test_t));
//Заполняем его
for (i=0;i<N;i++) Test2[i].Id=i;
//Выводим на экран
for (i=0;i<N;i++) printf("%d,",Test2[i].Id);
// освобождение памяти
free(Test1);
free(Test2);
}
Вроде бы все здорово - массивы создаются и заполняются, но в первом случае выводится на экран
0,1,2,3,4,5,6,7,8,9 (Test1) адрес переменной 3332,3334,3336,3338,3340,3342,3344,3346,3348,3350
а в
9,9,9,9,9,9,9,9,9,9 (Test2) адрес переменной 3356,3358,3360,3362,3364,3366,3368,3370,3372,3374
В чем проблема? структура же одинаковая, разница только в объявлении переменных - первая (Test1) локальная, а вторая глобальная(Test2)
т.е. походу всем элементам массива Test2 присваивается последний элемент