Я учусь с более глубоким доступом к памяти в C, и у меня есть вопрос, который я не могу решить.У меня есть код ниже, который решает башни Ханоя итеративно.И он прекрасно работает как на GCC, так и на CLANG, но не на VS2017.
#include <stdio.h>
#include <stdlib.h>
void solve(const int NUM_DISK)
{
const int ALPHA[2][3][2] =
{
{ { 1, 3 }, { 3, 2 }, { 2, 1 } }, /* even */
{ { 1, 2 }, { 2, 3 }, { 3, 1 } } /* odd */
};
const int MAX_ITER = 1 << NUM_DISK;
int **list = (int **) malloc( (MAX_ITER - 1) * sizeof(int*) );
int start, gap, disk, k, rank;
for (start = 1, gap = 2, disk = 1; disk <= NUM_DISK; ++disk, start <<= 1, gap <<= 1)
{
int **pp = (int **) &ALPHA[(NUM_DISK + disk) % 2];
for (k = 0, rank = start; rank < MAX_ITER + (disk % 2); rank += gap, ++k)
{
list[rank - 1] = (int *) &pp[k % 3];
}
}
for (rank = 0; rank < (MAX_ITER - 1); ++rank)
{
char origem = list[rank][0] + 64;
char destino = list[rank][1] + 64;
printf("%4d ) %c --> %c\n", (rank + 1), origem, destino);
}
free(list);
}
int main(int argc, char **argv)
{
int d = atoi(argv[1]);
solve(d);
return 0;
}
Предполагается, что у нас есть 3 диска:мне в чем проблема?