двумерный массив символов в структуре перезаписывается во время цикла - PullRequest
1 голос
/ 05 октября 2011

У меня есть структура, определенная так:

typedef struct stringd{
    char *y;
    char *x[32];
}stringd;

в основной программе. Я объявляю указатель на stringd, как показано:

stringd *d = malloc(sizeof(*d));

в основной функции.парсинг входной строки и последующее сохранение ее в двумерном массиве символовСимвол в моей входной строке Я копирую элементы c в * x [32] в строковой структуре.как показано ниже:

if (c[i][0]=='\174')
    for(j=0;j<=i;j++){
        d[k].x[j]=c[j]; 
        c[j]=NULL;
    }
k++;

после извлечения последней строки из входных данных (разделителем является пробел). Я делаю окончательную копию массива от c до x в stringd, как показано (токен - указатель на входstring);

if(*token == '\0'||*token=='\n' 
    for(j=0;j<=i;j++){
        d[k].x[j]=c[j];
    }

проблема здесь в том, что строки, сохраненные ранее в массиве struct char x, перезаписываются ненужными символами при последней операции.Куда я иду не так?

любая помощь оценена,

1 Ответ

2 голосов
/ 05 октября 2011

Если вы разместили код в том же порядке, вот что я вижу:

Вы выделили только один stringd объект. Но затем вы увеличиваете k после первого цикла. Таким образом, в вашем последнем утверждении if вы получаете доступ к d[k], который превышает то, что вы выделили.

Так что, если я правильно читаю, это неопределенное поведение, поскольку вы пишете в нераспределенную память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...