正确使用malloc

时间:2016-02-11 20:30:30

标签: c malloc dynamic-allocation

我正在尝试更新我的C技能。假设我正在尝试执行// Production steps of ECMA-262, Edition 5, 15.4.4.14 // Reference: http://es5.github.io/#x15.4.4.14 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(searchElement, fromIndex) { var k; // 1. Let o be the result of calling ToObject passing // the this value as the argument. if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Let lenValue be the result of calling the Get // internal method of o with the argument "length". // 3. Let len be ToUint32(lenValue). var len = o.length >>> 0; // 4. If len is 0, return -1. if (len === 0) { return -1; } // 5. If argument fromIndex was passed let n be // ToInteger(fromIndex); else let n be 0. var n = +fromIndex || 0; if (Math.abs(n) === Infinity) { n = 0; } // 6. If n >= len, return -1. if (n >= len) { return -1; } // 7. If n >= 0, then Let k be n. // 8. Else, n<0, Let k be len - abs(n). // If k is less than 0, then let k be 0. k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); // 9. Repeat, while k < len while (k < len) { // a. Let Pk be ToString(k). // This is implicit for LHS operands of the in operator // b. Let kPresent be the result of calling the // HasProperty internal method of o with argument Pk. // This step can be combined with c // c. If kPresent is true, then // i. Let elementK be the result of calling the Get // internal method of o with the argument ToString(k). // ii. Let same be the result of applying the // Strict Equality Comparison Algorithm to // searchElement and elementK. // iii. If same is true, return k. if (k in o && o[k] === searchElement) { return k; } k++; } return -1; }; } malloc

calloc

我认为我在这里正确使用calloc,但我不确定我是否正确使用malloc。当我需要返回虚空时,它会让我感到困惑。

2 个答案:

答案 0 :(得分:5)

在这两种情况下,你做错了:malloccalloc

malloc将分配您告诉它的字节数。

您致电malloc(sizeof(member_size))
变量member_size的类型为size_t(或多或少intsizeof(size_t)是4个字节(在许多平台上) 因此,sizeof(member_size)是4个字节,您正在调用malloc(4)

我认为你不想要4个字节 我想你想要malloc(nmember * member_size)

<小时/> 同样,对于calloc,您需要:calloc(nmember, member_size)

我不知道为什么你没有充分理由抛出随机的sizeof电话。

答案 1 :(得分:5)

我认为你的意思是以下

void * allocate_array( size_t member_size, size_t nmember, bool clear )
{
    return clear ? calloc( nmember, member_size ) : malloc( nmember * member_size );
}

至于你的功能定义,那么calloc的呼叫和malloc的呼叫都不正确。

考虑这个if语句

   if(clear){
       // ... 
   } else if(!clear) {
       // ... 
   }

最好像

一样写
   if(clear){
       // ... 
   } else {
       // ... 
   }

最后一条记录更清晰,