调用静态库函数时出现分段错误

发布于 2024-09-26 07:50:34 字数 735 浏览 4 评论 0原文

我有简单的 OpenGL C 程序(来自 NeHe 第 2 课)。有初始化函数InitGL。
我的静态库中有函数 foo

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

当我在 InitGL 开头定义 double 数组时:

double arr[1000];

并在 InitGL 中修改它,一切正常。

当我动态地为这个数组分配内存并从 InitGL 调用 foo 时,一切都正常:

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

但是当我在 InitGL 开头定义数组并调用时来自 InitGLfoo

double p[1000];
foo(p);

我在

p[0] = 1.0;

错误在哪里?

I have simple OpenGL C program (from NeHe lesson 2). There is initialization function InitGL.
And i have function foo in my static library:

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

When i define array of double at start of InitGL:

double arr[1000];

and modify it in InitGL all works fine.

When i allocate memory for this array dynamically and call foo from InitGL all works fine too:

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

But when i define array at start of InitGL and call foo from InitGL:

double p[1000];
foo(p);

i get segmentation fault at line

p[0] = 1.0;

Where is the error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画▽骨i 2024-10-03 07:50:34

Silver_Ghost 的已编辑问题,已在此处输入,因此该问题不会显示为有 0 个答案:

非常非常愚蠢的错误:D
最初我写了一个函数:

void cg_random_points(double **dest, int n, 
          双XL,双XR,
          双基,双基,
          double zl, double zr) 用于生成随机点集

3D空间。当然有
分段错误因为我必须
声明列数(我读过
30 分钟前 在 Kernighan 和
里奇书:)当我修复功能时
声明至

void cg_random_points(double (*dest)[3], int n, 
          双XL,双XR,
          双基,双基,
          双 zl、双 zr) 分段错误继续抛出

一个 for 循环,我忘记了更改
10000 到 1000。现在一切正常。

Silver_Ghost's edited question, entered here so the question doesn't show up as having 0 answers:

Very very stupid mistake :D
Initially i've writen a function:

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 space. Of course there was
segmentation fault because i must
declare number of columns (i read it
30 minutes ago in Kernighan and
Ritchie book :) When i fix function
declaration to

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

one for-loop where i forgot change
10000 to 1000. Now all works fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文