Основная проблема здесь в том, что rKernalSize
неизвестно в время компиляции , когда выделяется этот массив. Во время компиляции значение int rKernalSize
зависит от компилятора (если новый стандарт C явно не устанавливает его 0; 0 - это то значение, на которое я бы поставил). Поэтому, когда код загружен, появляется символ rKernal
, который представляет адрес части памяти, не содержащей байтов.
Но затем вы запускаете программу и читаете '3' с вашим scanf; когда вы выводите результаты, вы видите «3».
Этот код, кстати, не будет работать в прямом C - вы должны выделить его перед первым исполняемым оператором. Это скомпилируется в C ++.
Теперь, если вы хотите, используя прямую C, сделать что-то подобное, вот что вам нужно:
Считайте ваш размер, используя Scanf.
Выделите память для вашего массива, используя malloc
, который будет выглядеть примерно так:
х
int ** ary;
int rkSize; // what you scanf'd into
if((ary = malloc(rkSize*rkSize*sizeof(unsigned int)))==NULL){
// for some reason your malloc failed. You can't do much
fprintf(stderr,"Oops!\n");
exit(1);
}
// If you got here, then you have your array
Теперь, из-за двойственности указателя-массива в C, вы можете рассматривать это как свой массив
х
ary[1][1] = 42; // The answer