Динамическая инициализация указателя на указатель - PullRequest
0 голосов
/ 16 марта 2011

HII,

m инициализирует указатель на указатель следующим образом:

// i = количество элементов, на которые будет указывать указатель ....

m, считающий количество условий, присутствующих в запросе sql, и день хранения этих

условия в структуре (struct condition) ..

, поэтому я = нет условий в запросе

// последний элемент, для которого я установил значение NULL, почему (i + 1) в выражении malloc ..

// следующее объявление COND ...

               struct condition **COND;

// инициализация COND

               SQL_INS->s.COND = malloc((i+1)*sizeof(struct condition *));

// после этого m инициализирует отдельные элементы переменной COND следующим образом

, чтобы каждый указывал на новый объект структуры

               SQL_INS->s.COND[j] = malloc(sizeof(struct condition));

Я просто хочу знать, что это правильный способ делать то, что я делаю ... или есть ли лучший способ ...

Спасибо .... :)

1 Ответ

0 голосов
/ 17 марта 2011

Пожалуйста, правильно произнесите и сделайте свой вопрос немного более ясным, и вы не получите такие ответы ...

SQL_INS->s.COND = malloc(((i+1)*sizeof(struct condition *))+(i*sizeof(struct condition)))
struct condition **ptr = SQL_INS->s.COND;
struct condition *cur = (struct condition *)(ptr+i+1);
int j = 0;
for( ; j<i; j++)
  *(ptr+j) = cur++; 
*(ptr+j) = NULL;

Это сохраняет всю память в одном блоке, вместо того, чтобы использовать отдельные фрагменты для каждого фрагмента.структурное условие.Я думал, что это может сделать ваш код более читабельным, почему я сделал это:)

...