稍微修改我的代码后出现分段错误

时间:2010-11-22 20:32:36

标签: c arrays pointers segmentation-fault

我将复制相关的行:

(声明)

typedef struct { /* per una entrada de la taula de posicion */
    int f;
    int c;
} pos;
pos *p_opo[9];

(主要)

for (i = 0; i < num; i++) {
        p_opo[i] = (pos *) calloc(n_fil * n_col / 2, sizeof (pos)); 
    }

现在,在引入这些行之后,代码在任意点(在对给定库函数的调用中)中断。我怀疑我正在腐败这件事,虽然我不知道是什么。

我想要的只是拥有一组可变大小的数组!

PD:num是程序的参数。无论如何,我一直用num = 1运行它。

3 个答案:

答案 0 :(得分:2)

num应小于或等于9.(p_opo中0..8分配的指针等于9!)

请注意,在C中,如果内存泄漏等,您会在不同的位置出错。原因是通过更改某些代码,可以重新排列其他代码或数据,这可能最终导致分段错误。

所以问题很可能出现在你的程序的另一部分。确保你打开了所有警告(比如gcc中的-Wall选项),它可能会给你一些线索。

答案 1 :(得分:1)

如果您对calloc的调用询问大小为0的内存,则可能会返回NULL,如果您正在使用该内存,则可能会导致分段错误。所以如果:

 0 == (n_fil * n_col / 2)

或某种方式

0 == sizeof (pos)            /* I don't think that this is possible */

您要求的内存大小为0,因此calloc可以返回NULL。

如果情况并非如此,那么我认为你没有足够的代码可供任何人知道它为什么是segfaulting。您应该记住,在添加或更改某些与具有实际错误的代码完全无关的代码之前,这样的错误可能会被忽视。

答案 2 :(得分:0)

看到你施放calloc的回报让我怀疑。不要这样做,如果忘记系统功能的包含,这会导致典型的错误。

如果您使用的是64位指针和32位int的计算机,则会发生这种情况。