小编Mic*_*May的帖子

什么使短C代码中的分段错误?

大家.我编写了以下代码,编译并运行它但我遇到了分段错误.

#include <stdio.h>
typedef long long ll_t;

void store_prod(ll_t * dest, int x, ll_t y) {
    * dest = x * y;
}

int main(void)
{
    int a = 2049;
    ll_t b = 2147483645;
    ll_t * c;

    store_prod(c, a, b);
    printf("%d * %lld = %lld\n", a, b, *c);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dev-C++中的调试器转储如下:

0x00401500 <+0>:    push   %ebp
0x00401501 <+1>:    mov    %esp, %ebp
0x00401503 <+3>:    push   %ebx
0x00401504 <+4>:    sub    $0xc, %esp
0x00401507 <+7>:    mov    0x10(%ebp), %eax
0x0040150a <+10>:   mov    %eax, -0x10(%ebp) …
Run Code Online (Sandbox Code Playgroud)

c debugging assembly compilation

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

for ... in 循环是否循环遍历序列的副本?

我在 Matt Neuburg 的《iOS 13 Swift 编程基础》中看到了如下的陈述:

\n
\n

当您使用 for...in 循环访问序列时,您实际循环访问的是该序列的副本。这意味着当你循环遍历序列时,改变序列是安全的:

\n
\n

作者为上述陈述提供了以下示例:

\n
var s : Set = [1,2,3,4,5]\nfor i in s {\n    if i.isMultiple(of:2) {\n        s.remove(i)\n    }\n} // s is now [1,3,5]\n
Run Code Online (Sandbox Code Playgroud)\n

在上面的示例中,我们可以看到原始数组从 [1,2,3,4,5,6] 更改为 [1,3,5]。这意味着数组本身已更改。因此,for in循环不是循环原始数组的副本,而是循环数组本身。这似乎与作者上述的说法相矛盾。

\n

所以,我不确定作者的说法是否属实。有人可以澄清一下这个问题吗?非常感谢。

\n

arrays loops for-in-loop swift

0
推荐指数
1
解决办法
429
查看次数

标签 统计

arrays ×1

assembly ×1

c ×1

compilation ×1

debugging ×1

for-in-loop ×1

loops ×1

swift ×1