Ошибка сегментации при вызове статической библиотечной функции - PullRequest
4 голосов
/ 05 октября 2010

У меня есть простая программа на OpenGL C (из NeHe урок 2 ).Есть функция инициализации InitGL.
И у меня есть функция foo в моей статической библиотеке:

void foo(double *p)
{
    p[0] = 1.0;
}

Когда я определяю массив double в начале InitGL:

double arr[1000];

и измените его в InitGL все работает нормально.

Когда я динамически выделяю память для этого массива и вызываю foo из InitGL, все тоже отлично работает:

double *p = (double *)malloc(1000 * sizeof(double));
foo(p);

Но когда я определяю массив в начале InitGL и вызываюfoo из InitGL:

double p[1000];
foo(p);

Я получаю ошибку сегментации в строке

p[0] = 1.0;

Где ошибка?

1 Ответ

1 голос
/ 18 ноября 2010

Отредактированный вопрос Silver_Ghost, введенный здесь, чтобы вопрос не отображался как имеющий 0 ответов:

Очень очень глупая ошибка: D
Изначально я написал функцию:

void cg_random_points(double **dest, int n, 
          double xl, double xr,
          double yl, double yr,
          double zl, double zr) for generate set of random points in

3D пространство.Конечно, произошла ошибка сегментации, потому что я должен объявить количество столбцов (я прочитал это 30 минут назад в книге Кернигана и Ричи). Когда я фиксирую объявление функции в

void cg_random_points(double (*dest)[3], int n, 
          double xl, double xr,
          double yl, double yr,
          double zl, double zr) segmetation fault continued throw by

один цикл for, где я забыл изменитьОт 10000 до 1000. Теперь все отлично работает.

...