小编Jim*_*ron的帖子

C 编程 Malloc 做得不对

当我创建一个动态数组时:

int *arr = (int *) malloc( 4 * sizeof(int) );

Run Code Online (Sandbox Code Playgroud)

所以它应该包含 4 个整数(对于空间问题可能还有 2 或 3 个),但为什么这样做:

    for ( int x = 0; x < 30000; x++) {
         arr[x] = x;
     }
Run Code Online (Sandbox Code Playgroud)

我的意思是不应该有 30.000 个变量的空间,而且它工作得很好,可能是什么原因?它是否像 c++ std::vector 一样自动重新分配,或者我如何理解它?

如果我将循环范围设置为 50.000,它会崩溃,但它甚至应该像索引 a[100] 或之前那样崩溃,因为数组有 4 个元素。

如果这很重要,我正在使用 gnu/linux。

我非常努力地理解它。

请帮忙

c linux malloc dynamic-memory-allocation

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

更改以 execve() 启动的子进程的当前目录

我想更改子进程的环境变量,execve()以便如果子进程打开当前目录中的文件,它将链接到另一个目录。我必须更改什么环境变量才能完成此任务?$PWD不管用。

例如:

char *args[] = { .... };
char *env[] = { "PWD=/home/anydirectory_I_Wish", NULL };
execve( mycode, args, env);
Run Code Online (Sandbox Code Playgroud)

c linux environment-variables

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

将 MIT Scheme 代码逻辑转换为 Common Lisp

在我的一本书中,我有这个方案代码,并想将其转换为 Common Lisp:

(define (make-account balance)

  (define (withdraw amount)
    (if (>= balance amount)
      (begin (set! balance (- balance amount))
        balance)
        "Insufficient funds"))

  (define (deposit amount)
    (set! balance (+ balance amount))
      balance)

  (define (dispatch m)
    (cond
      ((eq? m 'withdraw) withdraw)
      ((eq? m 'deposit) deposit)
      (else (error "Unknown request -- MAKE-ACCOUNT" m))))

  dispatch)
Run Code Online (Sandbox Code Playgroud)

然后我将使用以下命令创建它:

(define acc (make-account 1500))
Run Code Online (Sandbox Code Playgroud)

然后调用depositwithdraw

((acc 'withdraw) 50) 或者

((acc 'deposit) 75)

据我了解, acc被函数替换dispatch并返回withdrawordeposit 然后计算表达式,例如: ((acc 'withdraw) 50) …

lisp scheme sbcl common-lisp mit-scheme

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