Tripple pointer
От: almos  
Дата: 04.06.09 10:58
Оценка:
Доброго всем времени суток.

Подскажите пожалуйста как решить проблему.

Есть следующий код, функция ch меняет содержимое двумерного массива char.
В MSVC7 данный код чудесно компилится и работает, но мне нужно его откомпилить на HP-UX компилятором c89.

Но вот тут и проблема, при попытке компиляции c89 отображается сообщение ошибки компиляции

cc: "test.c", line 4: error 1000: Unexpected symbol: "&".
cc: "test.c", line 23: error 1000: Unexpected symbol: "&".
#include "stdlib.h"
#include "stdio.h"

void ch(char **&i);

int _tmain()
{
     char **buf = NULL;
     
     printf("%p\n",buf);
     
     ch(buf);
     
     printf("%p\n",buf);

     printf("\n%s", buf[0]);
     printf("\n%s", buf[1]);
     printf("\n%s", buf[2]);

     return 0;
}

void ch(char **&i)
{
     i = (char**)malloc(3*sizeof(char*));

     i[0] = (char*)calloc(6,sizeof(char));
     i[1] = (char*)calloc(6,sizeof(char));
     i[2] = (char*)calloc(6,sizeof(char));

     strcpy(i[0],"test1");
     strcpy(i[1],"test2");
     strcpy(i[2],"test3");
}


Соответственно нужно использовать тройной указатель — void ch(char ***i);

Но вот тут загвоздка — не получается выделить нормально память под элементы массива в данном случае. Программа выпадает в кору.

Пробовал так:
void ch(char ***i)
{
     *i = (char**)malloc(3*sizeof(char*));

     *i[0] = (char*)calloc(6,sizeof(char));
     *i[1] = (char*)calloc(6,sizeof(char));
     *i[2] = (char*)calloc(6,sizeof(char));

     strcpy(*i[0],"test1");
     strcpy(*i[1],"test2");
     strcpy(*i[2],"test3");
}

Но видимо что-то неправильно. Раньше не сталкивался с подобной задачей.

Буду очень благодарен за ответ.

добавлена разметка — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.