Я смотрю экзамены по Си из прошлых лет, и мне попался вопрос, который я не до конца понял.Они предоставили простой кусок кода и спросили о расположении различных переменных в памяти.Варианты были heap
stack
и unknows
.Я знаю, что автоматические переменные инициализируются в стеке, и что динамически размещенные переменные находятся в куче.
Итак, первый вопрос - что неизвестно?
Для второго вопроса вот код и таблица с правильным ответом:
#include <string.h>
#include <stdlib.h>
typedef struct
{
char *_str;
int _l;
} MyString;
MyString* NewMyString (char *str)
{
MyString *t = (MyString *) malloc (sizeof (MyString)); //LINE 12
t->_l = strlen (str);
t->_str = (char*) malloc (t->_l + 1);
strcpy (t->_str, str);
return t;
}
int main()
{
MyString ** arr = (MyString**) malloc (sizeof (MyString*)*10); //LINE 21
int i;
for (i=0;i<10;i++)
{
arr[i] = NewMyString ("item"); //LINE 25
}
// do something
// free allocated memory
return 0;
}
А вот таблица срезультаты, которые я не понял
Variable Line number Memory location
arr 21 stack
*arr 21 heap
**arr 21 unknows
arr[5] 25 heap
arr[3]->_str[2] 25 heap
*(t->_str) 12 unknows
Мне кажется, я понимаю arr
и *arr
, но почему **arr
неизвестно?На остальное я не мог ответить вообще, поэтому любая помощь была бы отличной.Я знаю это долго, так что спасибо заранее ...