С нарушением доступа после использования calloc - PullRequest
1 голос
/ 31 января 2011

Примечание. C - это компилятор Microsoft C.

У меня проблемы со следующим кодом.

*Roomsize = (int*)calloc(sizeof(int),sched->numberOfRooms);

roomIndex = 0;
for(roomIndex=0; roomIndex< sched->numberOfRooms; roomIndex++)
{
    fscanf(inputFile,"%d",&lineInput);
    numberOfLinesRead++;
    *Roomsize[roomIndex] = lineInput;
}

Это в отдельном C-файле. У меня не было этой проблемы, пока я не решил отделить вещи, чтобы сделать их более удобными для обслуживания, и я думаю, что я просто немного путаюсь с указателями.

Каллок работает нормально.

На первой итерации цикла нулевой элемент roomIndex устанавливается правильно.

Однако второй элемент (элемент 1) в цикле всегда приводит к нарушению доступа во время выполнения.

Я столкнулся с этой проблемой позже и в своем коде с 2d-массивом, но я решил, что это точно такая же проблема, и это только самый простой случай.

Может ли кто-нибудь помочь мне понять, почему кажется невозможным установить здесь что-либо, кроме первого элемента?

Ответы [ 2 ]

5 голосов
/ 31 января 2011

*Roomsize[roomIndex] совпадает с *(Roomsize[roomIndex]).Вы хотите сказать (*Roomsize)[roomIndex].

(я предполагаю, что Roomsize на самом деле int**. Если это не правильно, проблема может быть в другом месте.)

0 голосов
/ 31 января 2011

Ваша первая строка, когда вы выделяете Roomsize, выглядит неправильно.Если я прав в предположении, что Roomsize - это int *, вы должны просто сказать Roomsize = (int *) calloc... Как написала @Daniel, ваше назначение также следует изменить, чтобы избавиться от звездочки.

...