好吧,我已经搜遍过所有的搜索结果,所以请原谅这个问题是否有问题。
在C(gcc,Linux x86_64)中,尝试使用此代码测试指针有效:
if(ptr) { ... }
但是当我这样做时,我得到了一个段错误:
while(set1) {
n++;
set3 = realloc(set3, sizeof(int) * n);
set3[n-1] = *set1;
}
甚至是这样:
for(; set1; set1++) {
n++;
set3 = realloc(set3, sizeof(int) * n);
set3[n-1] = *set1;
set1++;
}
有人可以解释一下吗?我哪里错了? :S
注意:上面提到的`if'里面的代码只是用于测试,我实际上并不需要它
答案 0 :(得分:4)
我认为你误解了“测试指针”的含义。条件if(p)
与if(p != 0)
相同,因此您正在测试的所有指针是否为空。 nothing 告诉您是否可以取消引用任何指定的指针。
特别是,for(; ptr; ptr++) { ... }
将继续永久递增指针;如果你在体内取消引用ptr
,你几乎肯定会最终导致访问冲突。
你自己负责知道你可以增加多少指针!
(撇开:如果你根本没有取消引用ptr
,这可能会循环直到ptr
溢出并再次为0,但这可能永远不会发生,具体取决于{{1的初始值}和ptr
。)
答案 1 :(得分:1)
我猜ptr不为空(所以if会评估为true)但你的指针无效(即:它被释放,或者即使ptr = 1,“if”将评估为true但你不会能够访问记忆位置1)
也许你可以在你的代码的不同部分尝试fprintf(stdout,“%p”,ptr),这样你就可以追踪价值被搞砸的地方,我们真的需要更多细节:)