我将复制相关的行:
(声明)
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运行它。
答案 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
的计算机,则会发生这种情况。