当我创建一个动态数组时:
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。
我非常努力地理解它。
请帮忙
我想更改子进程的环境变量,execve()以便如果子进程打开当前目录中的文件,它将链接到另一个目录。我必须更改什么环境变量才能完成此任务?$PWD不管用。
例如:
char *args[] = { .... };
char *env[] = { "PWD=/home/anydirectory_I_Wish", NULL };
execve( mycode, args, env);
Run Code Online (Sandbox Code Playgroud) 在我的一本书中,我有这个方案代码,并想将其转换为 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)
然后调用deposit或withdraw:
((acc 'withdraw) 50)
或者
((acc 'deposit) 75)
据我了解,
acc被函数替换dispatch并返回withdrawordeposit
然后计算表达式,例如:
((acc 'withdraw) 50) …