小编The*_*Fox的帖子

空检查何时可以抛出 NullReferenceException

我知道一开始这似乎是不可能的,一开始对我来说也是如此,但最近我看到了这种代码抛出 a NullReferenceException,所以这绝对是可能的。

不幸的是,Google 上几乎没有任何结果可以解释诸如此类的代码何时foo == null会引发 NRE,这会使调试和理解其发生的原因变得困难。因此,为了记录这种看似奇怪的事件可能发生的可能方式。

这段代码可以以什么方式foo == null抛出NullReferenceException?

c# null nullreferenceexception

32
推荐指数
4
解决办法
2581
查看次数

什么是伤疤有用?

在Huet的题为"The Zipper"的论文中,他还提到疤痕是拉链的变体.与在Haskell社区中广为人知的拉链相比,疤痕几乎闻所未闻.关于它们在纸张本身和互联网上的任何地方都很少有我能找到的信息.

所以我不得不问,它们根本没有用,或者它们是否有用,但大多数人只是不了解它们?

haskell zipper

15
推荐指数
1
解决办法
247
查看次数

在某些情况下,您可以使用限制指针来访问同一个对象吗?

大多数限制的定义都说它是程序员对编译器的承诺,在指针的生命周期中,指针是访问对象的唯一方式.这允许编译器优化输出,因为它知道它只能被一个指针访问,因此只能由它来改变.如果我理解正确通常意味着程序不必重新加载指针指向的值.

如果这是正确的,那么当restrict关键字应该可用时应该有一些例外,即使它违背了应该如何使用它的意图.

我想到的一件事是指针指向的数据在指针的生命周期内从未实际发生过变化.在这种情况下,即使指针指向同一位置也不需要重新加载数据,因为它们在指针的生命周期中不会改变.例如:

int max(int *restrict a, int *restrict b) {
  return((*a > *b) ? *a : *b);
}

int main(void) {
  int num = 3;
  int max = max(&num, &num);
}
Run Code Online (Sandbox Code Playgroud)

这是对限制的有效使用,即使它与它应该如何使用相反吗?使用这样的restrict关键字会导致未定义的行为吗?

c pointers restrict-qualifier

6
推荐指数
1
解决办法
195
查看次数

分配内存时代码导致分段错误或释放内存时中止程序

当我尝试运行代码时,它会导致第 89 行的 malloc 出现分段错误,其中包含“s1 = malloc(65536);” 即使我将其更改为 calloc 或 realloc,它仍然存在,并且如果我在第 82 或 86 行有释放内存的函数,它也会导致写入:

*** glibc detected *** /home/purlox/whaat: free(): invalid next size (normal): 0x00000000017b32b0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7ff4f61aeb96]
/home/purlox/whaat[0x400904]
/home/purlox/whaat[0x4024de]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7ff4f615176d]
/home/purlox/whaat[0x400699]
======= Memory map: ========
00400000-00404000 r-xp 00000000 00:15 524713                             /home/purlox/whaat
00603000-00604000 r--p 00003000 00:15 524713                             /home/purlox/whaat
00604000-00605000 rw-p 00004000 00:15 524713                             /home/purlox/whaat
01793000-017b4000 rw-p 00000000 00:00 0                                  [heap]
7ff4f5f18000-7ff4f5f2d000 r-xp 00000000 08:05 4066792                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff4f5f2d000-7ff4f612c000 ---p 00015000 08:05 4066792                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff4f612c000-7ff4f612d000 r--p 00014000 08:05 4066792 …
Run Code Online (Sandbox Code Playgroud)

c free memory-management segmentation-fault

2
推荐指数
1
解决办法
562
查看次数