char *cp = (char *) malloc(1);
strcpy(cp, "123456789");
puts(cp);
gcc(Linux)和Visual C ++ Express上的输出是“123456789â€ï¼Œè¿™æ˜¯å¦æ„味ç€å½“有空闲内å˜æ—¶ï¼Œæˆ‘实际上å¯ä»¥ä½¿ç”¨çš„内容超过我用malloc()
分é…的内容?
以åŠä¸ºä»€ä¹ˆmalloc(0)
ä¸ä¼šå¯¼è‡´è¿è¡Œæ—¶é”™è¯¯ï¼Ÿ
感谢。
ç”案 0 :(得分:61)
ä½ é—®è¿‡ä¸€ä¸ªéžå¸¸å¥½çš„é—®é¢˜ï¼Œä¹Ÿè®¸è¿™ä¼šæ¿€èµ·ä½ å¯¹æ“作系统的兴趣。您已ç»çŸ¥é“自己已ç»è®¾æ³•é€šè¿‡æ¤ä»£ç 实现了一些您通常ä¸å¸Œæœ›åšçš„äº‹æƒ…ã€‚å› æ¤ï¼Œæ‚¨æ°¸è¿œä¸ä¼šåœ¨æƒ³è¦ç§»æ¤çš„代ç ä¸æ‰§è¡Œæ¤æ“作。
更具体地说,这完全å–决于您的æ“作系统和CPU架构,æ“作系统会为您的程åºåˆ†é…“页é¢â€å†…å˜ - 通常这å¯èƒ½æ˜¯4åƒå—节的顺åºã€‚æ“作系统是页é¢çš„守护者,将立å³ç»ˆæ¢å°è¯•è®¿é—®å°šæœªåˆ†é…的页é¢çš„任何程åºã€‚
å¦ä¸€æ–¹é¢ï¼Œ malloc
ä¸æ˜¯æ“作系统函数,而是C库调用。它å¯ä»¥é€šè¿‡å¤šç§æ–¹å¼å®žçŽ°ã€‚您对malloc
的调用å¯èƒ½ä¼šå¯¼è‡´æ¥è‡ªæ“作系统的页é¢è¯·æ±‚。然åŽmalloc
å†³å®šç»™ä½ ä¸€ä¸ªæŒ‡å‘该页é¢å†…å•ä¸ªå—èŠ‚çš„æŒ‡é’ˆã€‚å½“ä½ ä»Žä½ ç»™å‡ºçš„ä½ç½®å†™å…¥å†…å˜æ—¶ï¼Œä½ åªæ˜¯å†™åœ¨æ“ä½œç³»ç»ŸæŽˆäºˆä½ ç¨‹åºçš„“页é¢â€ä¸ï¼Œå› æ¤æ“作系统ä¸ä¼šçœ‹åˆ°ä»»ä½•é”™è¯¯çš„æ“作。
当然,当您继ç»è‡´ç”µmalloc
以分é…更多内å˜æ—¶ï¼ŒçœŸæ£çš„问题就会开始。它最终将返回指å‘您刚刚写入的ä½ç½®çš„指针。当您写入åˆæ³•çš„内å˜ä½ç½®ï¼ˆä»Žæ“作系统的角度æ¥çœ‹ï¼‰æ—¶ï¼Œè¿™ç§°ä¸ºâ€œç¼“冲区溢出â€ï¼Œä½†å¯èƒ½ä¼šè¦†ç›–程åºçš„å¦ä¸€éƒ¨åˆ†ä¹Ÿå°†ä½¿ç”¨çš„内å˜ã€‚
å¦‚æžœä½ ç»§ç»äº†è§£è¿™ä¸ªä¸»é¢˜ï¼Œä½ 将开始ç†è§£å¦‚何使用这ç§â€œç¼“冲区溢出â€æŠ€æœ¯æ¥åˆ©ç”¨ç¨‹åº - 甚至å¯ä»¥å¼€å§‹å°†æ±‡ç¼–è¯è¨€æŒ‡ä»¤ç›´æŽ¥å†™å…¥å°†è¦å˜å‚¨çš„内å˜åŒºåŸŸã€‚ç”±ä½ çš„ç¨‹åºçš„å¦ä¸€éƒ¨åˆ†æ‰§è¡Œã€‚
å½“ä½ è¿›å…¥è¿™ä¸ªé˜¶æ®µæ—¶ï¼Œä½ å°†èŽ·å¾—å¾ˆå¤šæ™ºæ…§ã€‚ä½†è¯·éµå®ˆé“德规范,ä¸è¦ç”¨å®ƒæ¥ç ´å宇宙ï¼
PS当我说“æ“作系统â€æ—¶ï¼Œæˆ‘çš„æ„æ€æ˜¯â€œæ“作系统与特æƒCPU访问一起â€ã€‚如果进程å°è¯•ä½¿ç”¨å°šæœªåˆ†é…给该进程的页é¢ï¼Œåˆ™CPUå’ŒMMU(内å˜ç®¡ç†å•å…ƒï¼‰ä¼šè§¦å‘特定的æ“作系统ä¸æ–或回调。然åŽï¼Œæ“作系统会干净地关é—您的应用程åºï¼Œå¹¶å…许系统继ç»è¿è¡Œã€‚在过去,在内å˜ç®¡ç†å•å…ƒå’Œç‰¹æƒCPU指令之å‰ï¼Œä½ å‡ ä¹Žå¯ä»¥éšæ—¶åœ¨å†…å˜ä¸çš„任何地方写入 - 然åŽä½ 的系统将完全å—到内å˜å†™å…¥åŽæžœçš„支é…ï¼
ç”案 1 :(得分:21)
没有。您得到未定义的行为。这æ„味ç€ä»»ä½•äº‹æƒ…都å¯èƒ½å‘生,从它崩溃(yay)到它“工作â€ï¼ˆboo),é‡æ–°æ ¼å¼åŒ–ä½ çš„ç¡¬ç›˜å¹¶å¡«å……æ–‡æœ¬æ–‡ä»¶ï¼Œè¯´â€œUB,UB,UB ......â€ï¼ˆwat)。 / p>
在æ¤ä¹‹åŽæƒ³çŸ¥é“会å‘生什么是没有æ„ä¹‰çš„ï¼Œå› ä¸ºå®ƒå–å†³äºŽä½ çš„ç¼–è¯‘å™¨ï¼Œå¹³å°ï¼ŒçŽ¯å¢ƒï¼Œæ—¶é—´ï¼Œæœ€å–œæ¬¢çš„汽水ç‰ç‰ï¼Œæ‰€æœ‰è¿™äº›éƒ½å¯ä»¥éšå¿ƒæ‰€æ¬²åœ°åšä»»ä½•ä»–们想è¦çš„事情。
更具体地说,使用未分é…的任何内å˜æ˜¯æœªå®šä¹‰çš„è¡Œä¸ºã€‚ä½ ä»Žmalloc(1)
得到一个å—èŠ‚ï¼Œå°±æ˜¯è¿™æ ·ã€‚
ç”案 2 :(得分:16)
当您å‘malloc
询问1个å—节时,它å¯èƒ½ä¼šä»Žæ“作系统获得1页(通常为4KB)。æ¤é¡µé¢å°†åˆ†é…ç»™è°ƒç”¨è¿›ç¨‹ï¼Œå› æ¤åªè¦æ‚¨ä¸ç¦»å¼€é¡µé¢è¾¹ç•Œï¼Œå°±ä¸ä¼šæœ‰ä»»ä½•é—®é¢˜ã€‚
但请注æ„,它ç»å¯¹æ˜¯æœªå®šä¹‰çš„行为ï¼
考虑使用malloc
æ—¶å¯èƒ½å‘生的以下(å‡è®¾ï¼‰ç¤ºä¾‹ï¼š
malloc(1)
malloc
内部内å˜ä¸è¶³ï¼Œå®ƒä¼šå‘æ“作系统询问更多内容。它通常会收到一个页é¢ã€‚å‡è®¾å®ƒçš„大å°ä¸º4KB,地å€ä»Ž0x1000开始malloc(1)
malloc
ä»æœ‰ä¸€äº›å†…å˜ï¼Œæ‰€ä»¥ä¸éœ€è¦å‘æ“作系统询问更多内å˜ã€‚它å¯èƒ½ä¼šè¿”回地å€0x1001。malloc
æ供的地å€å†™å…¥è¶…过1个å—节,则在使用第二个malloc
ä¸çš„地å€æ—¶ä¼šé‡åˆ°éº»çƒ¦ï¼Œå› 为您将覆盖数æ®ã€‚ 所以é‡ç‚¹æ˜¯ä½ 肯定从malloc 得到1个å—节,但它å¯èƒ½æ˜¯malloc
内部有更多的内å˜åˆ†é…ç»™ä½ è¿›ç¨‹ã€‚
ç”案 3 :(得分:3)
没有。这æ„味ç€æ‚¨çš„程åºè¡¨çŽ°ä¸ä½³ã€‚它写入它ä¸æ‹¥æœ‰çš„内å˜ä½ç½®ã€‚
ç”案 4 :(得分:2)
ä½ å¾—åˆ°æœªå®šä¹‰çš„è¡Œä¸º - 任何事情都å¯èƒ½å‘生。ä¸è¦è¿™æ ·åšï¼Œä¹Ÿä¸è¦çŒœæµ‹å®ƒæ˜¯å¦æœ‰æ•ˆã€‚ä¹Ÿè®¸å®ƒä¼šç ´åè®°å¿†ï¼Œä½ ä¸ä¼šç«‹åˆ»çœ‹åˆ°å®ƒã€‚仅访问分é…çš„å—大å°å†…的内å˜ã€‚
ç”案 5 :(得分:2)
您å¯èƒ½è¢«å…许使用,直到内å˜åˆ°è¾¾æŸä¸ªç¨‹åºå†…å˜æˆ–您的应用程åºå¾ˆå¯èƒ½å› 访问å—ä¿æŠ¤çš„内å˜è€Œå´©æºƒçš„其他点
ç”案 6 :(得分:2)
如æ¤å¤šçš„回应,åªæœ‰ä¸€ä¸ªç»™å‡ºäº†æ£ç¡®çš„解释。虽然页é¢å¤§å°ï¼Œç¼“冲区溢出和未定义的行为故事都是真实的(并且很é‡è¦ï¼‰ï¼Œä½†å®ƒä»¬å¹¶ä¸å®Œå…¨å›žç”原始问题。实际上,任何åˆç†çš„malloc
实现都将至少分é…int
或void *
的对é½è¦æ±‚的大å°ã€‚ä¸ºä»€ä¹ˆï¼Œå› ä¸ºå¦‚æžœå®ƒåªåˆ†é…了1个å—节,那么下一个内å˜å—å°†ä¸å†å¯¹é½ã€‚总是有一些书ç±ä¿å˜å›´ç»•ä½ 分é…çš„å—çš„æ•°æ®ï¼Œè¿™äº›æ•°æ®ç»“æž„å‡ ä¹Žæ€»æ˜¯ä¸Ž4çš„å€æ•°å¯¹é½ã€‚虽然一些架构å¯ä»¥è®¿é—®æœªå¯¹é½åœ°å€ï¼ˆx86)上的å•è¯ï¼Œä½†å®ƒä»¬ç¡®å®žä¼šå› æ¤è€Œå—åˆ°ä¸€äº›æƒ©ç½šï¼Œå› æ¤åˆ†é…器实现者é¿å…è¿™æ ·åšã€‚å³ä½¿åœ¨slab分é…器ä¸ï¼Œä¹Ÿæ²¡æœ‰å¿…è¦è®¾ç½®ä¸€ä¸ª1å—èŠ‚çš„æ± ï¼Œå› ä¸ºå®žé™…ä¸Šå¾ˆå°çš„分é…很少。所以很å¯èƒ½ä½ çš„mallocå—节ä¸æœ‰4或8个å—节的真实空间(这并ä¸æ„味ç€ä½ å¯ä»¥ä½¿ç”¨é‚£ä¸ª'功能',这是错误的。)
编辑æ¤å¤–,大多数malloc
会ä¿ç•™æ¯”è¦æ±‚时更大的å—,以é¿å…在调用realloc
时进行多次å¤åˆ¶æ“作。作为测试,您å¯ä»¥å°è¯•åœ¨å¢žåŠ 分é…大å°çš„循环ä¸ä½¿ç”¨realloc
并比较返回的指针,您将看到它仅在æŸä¸ªé˜ˆå€¼ä¹‹åŽå‘生å˜åŒ–。
ç”案 7 :(得分:1)
ç”案 8 :(得分:1)
在大多数平å°ä¸Šï¼Œæ‚¨ä¸èƒ½åªåˆ†é…一个å—节。 malloc通常还会åšä¸€äº›å†…务处ç†æ¥è®°ä½åˆ†é…的内å˜é‡ã€‚è¿™å°±äº§ç”Ÿäº†è¿™æ ·ä¸€ä¸ªäº‹å®žï¼šæ‚¨é€šå¸¸ä¼šâ€œåˆ†é…â€å‘下èˆå…¥åˆ°ä¸‹ä¸€ä¸ª4或8个å—节的内å˜ã€‚但这ä¸æ˜¯ä¸€ç§å®šä¹‰çš„行为。
å¦‚æžœä½ å¤šä½¿ç”¨å‡ ä¸ªå—èŠ‚ï¼Œä½ å°±ä¼šéžå¸¸å–œæ¬¢è®¿é—®å†²çªã€‚
ç”案 9 :(得分:1)
è¦å›žç”æ‚¨çš„ç¬¬äºŒä¸ªé—®é¢˜ï¼Œè¯¥æ ‡å‡†æ˜Žç¡®è¦æ±‚malloc(0)
åˆæ³•ã€‚返回值å–决于实现,å¯ä»¥æ˜¯NULL
或常规内å˜åœ°å€ã€‚在任何一ç§æƒ…况下,您都å¯ä»¥ï¼ˆå¹¶ä¸”应该)在完æˆåŽåˆæ³•åœ°åœ¨è¿”回值上调用free
。å³ä½¿éžNULL
,您也ä¸å¾—访问该地å€çš„æ•°æ®ã€‚
ç”案 10 :(得分:1)
malloc 分é…æ‚¨åœ¨å †ä¸è¯¢é—®çš„内å˜é‡ï¼Œç„¶åŽè¿”回一个指å‘void(void *)的指针,该指针å¯ä»¥è½¬æ¢ä¸ºæ‚¨æƒ³è¦çš„任何内容。
程åºå‘˜çš„责任仅使用已分é…的内å˜ã€‚ 在ä¸åº”该的地方写入(甚至在å—ä¿æŠ¤çš„环境ä¸è¯»å–)å¯èƒ½ä¼šåœ¨æ‰§è¡Œæ—¶é—´å¯¼è‡´å„ç§éšæœºé—®é¢˜ã€‚如果您幸è¿æ‚¨çš„程åºä¼šç«‹å³å´©æºƒå¹¶å‡ºçŽ°å¼‚常,您å¯ä»¥è½»æ¾æ‰¾åˆ°è¯¥é”™è¯¯å¹¶è¿›è¡Œä¿®å¤ã€‚å¦‚æžœä½ ä¸å¹¸è¿ï¼Œå®ƒå°†éšæœºå´©æºƒæˆ–产生æ„外行为。
对于墨è²å®šå¾‹ï¼Œâ€œä»»ä½•å¯èƒ½å‡ºé”™çš„东西,都会出错â€å¹¶ä½œä¸ºå…¶ä¸çš„必然结果,“它会出错æ£ç¡®çš„时间,产生最大é‡çš„伤害“。 é—憾的是,这是真的。防æ¢è¿™ç§æƒ…况å‘生的唯一方法是é¿å…使用那ç§èƒ½å¤Ÿå®žé™…执行æ¤ç±»æ“作的è¯è¨€ã€‚
现代è¯è¨€ä¸å…许程åºå‘˜åœ¨å†…å˜ä¸å†™å…¥ä»–/她ä¸åº”该写的内容(至少åšæ ‡å‡†ç¼–程)。这就是Java如何获得它的动力。我更喜欢 C ++ 到C。您ä»ç„¶å¯ä»¥ä½¿ç”¨æŒ‡é’ˆè¿›è¡Œä¿®å¤ï¼Œä½†ä¸å¤ªå¯èƒ½ã€‚这就是 Smart Pointers 如æ¤å—æ¬¢è¿Žçš„åŽŸå› ã€‚
为了解决这些问题,malloc库的调试版å¯ä»¥å¾ˆæ–¹ä¾¿ã€‚您需è¦å®šæœŸè°ƒç”¨æ£€æŸ¥åŠŸèƒ½ä»¥æ£€æµ‹å†…å˜æ˜¯å¦å·²æŸå。 当我以å‰åœ¨å·¥ä½œä¸å¯†é›†ä½¿ç”¨C / C ++时,我们使用 Rational Purify ,在实践ä¸æ›¿æ¢æ ‡å‡†çš„malloc(C ++ä¸çš„新内容)和free(在C ++ä¸åˆ 除)并且它能够返回准确报告程åºåœ¨å“ªé‡Œåšäº†ä¸€äº›ä¸åº”该åšçš„事情。但是,您永远ä¸ä¼šç¡®å®š100%您的代ç ä¸æ²¡æœ‰ä»»ä½•é”™è¯¯ã€‚如果您的情况æžå°‘å‘生,那么当您执行该程åºæ—¶ï¼Œæ‚¨å¯èƒ½ä¸ä¼šé‡åˆ°è¿™ç§æƒ…况。它最终会在最ç¹å¿™çš„一天生æˆæœ€æ•æ„Ÿçš„æ•°æ®ï¼ˆæ ¹æ®å¢¨è²å®šå¾‹; - )
ç”案 11 :(得分:0)
å¦‚æžœä¼ é€’çš„å¤§å°ä¸ºé›¶ï¼Œå¹¶ä¸”pträ¸ä¸ºNULL,则调用ç‰æ•ˆäºŽå…费。
ç”案 12 :(得分:0)
我的回ç”是回å¤Why does printf not seg fault or produce garbage?
æ¥è‡ª
 ÂDenis Ritchie撰写的C编程è¯è¨€ï¼†amp; Kernighançš„
typedef long Align; /* for alignment to long boundary */
union header { /* block header */
struct {
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
} s;
Align x; /* force alignment of blocks */
};
typedef union header Header;
永远ä¸ä¼šä½¿ç”¨Align
å—段; 它åªä¼šå¼ºåˆ¶æ¯ä¸ªæ ‡é¢˜åœ¨æœ€å情况边界上对é½ã€‚
在malloc
ä¸ï¼Œè¯·æ±‚çš„å—符大å°å‘上èˆå…¥ä¸ºæ£ç¡®æ•°é‡çš„æ ‡é¢˜å¤§å°çš„å•ä½;è¦åˆ†é…çš„å—包å«
å¦ä¸€ä¸ªå•ä½ï¼Œå¯¹äºŽheader
本身,这是记录在ä¸çš„值
æ ‡é¢˜çš„size
å—段。
malloc返回的指针指å‘å¯ç”¨ç©ºé—´ï¼Œè€Œä¸æ˜¯æ ‡é¢˜æœ¬èº«ã€‚
 Â用户å¯ä»¥å¯¹è¯·æ±‚的空间执行任何æ“作,但如果在分é…的空间之外写入任何内容,则列表å¯èƒ½ä¼šè¢«åŠ 扰。
-----------------------------------------
| | SIZE | |
-----------------------------------------
| |
points to |-----address returned touser
next free
block
-> a block returned by malloc
声明
char* test = malloc(1);
如果请求的å—节å¯ç”¨ï¼Œ malloc()将å°è¯•ä»ŽRAMçš„å †éƒ¨åˆ†æœç´¢è¿žç»çš„å—节,并返回address
,如下所示
--------------------------------------------------------------
| free memory | memory in size allocated for user | |
----------------------------------------------------------------
0x100(assume address returned by malloc)
test
å› æ¤ï¼Œå½“malloc(1)
执行时,它ä¸ä¼šä»…分é…1
个å—节,它会分é…一些extra
个å—节æ¥ç»´æŠ¤ä¸Šé¢çš„结构/å †è¡¨ã€‚æ‚¨å¯ä»¥é€šè¿‡æ‰“å°1
找出仅请求test[-1]
å—节时分é…的实际内å˜é‡ï¼Œå› 为åªæ˜¯åœ¨è¯¥å—包å«å¤§å°ä¹‹å‰ã€‚
char* test = malloc(1);
printf("memory allocated in bytes = %d\n",test[-1]);
ç”案 13 :(得分:0)
strcpy()ä¸æ£€æŸ¥å®ƒå†™å…¥çš„内å˜æ˜¯å¦å·²åˆ†é…。它åªèŽ·å–ç›®æ ‡åœ°å€å¹¶æŒ‰å—符写入æºå—符,直到达到'\ 0'ã€‚å› æ¤ï¼Œå¦‚果分é…çš„ç›®æ ‡å†…å˜å°äºŽæºï¼Œåˆ™åªéœ€å†™å…¥å†…å˜ã€‚这是一个å±é™©çš„é”™è¯¯ï¼Œå› ä¸ºå®ƒå¾ˆéš¾è¿½è¸ªã€‚
puts()写入å—符串,直到达到'\ 0'。
我的猜测是malloc(0)åªè¿”回NULL并且ä¸ä¼šå¯¼è‡´è¿è¡Œæ—¶é”™è¯¯ã€‚
ç”案 14 :(得分:0)
没有“Cè¿è¡Œæ—¶â€ã€‚ C是美化汇编程åºã€‚它会很ä¹æ„è®©ä½ èµ°é地å€ç©ºé—´å¹¶éšå¿ƒæ‰€æ¬²åœ°åšä»»ä½•äº‹æƒ…,这就是为什么它是编写OSå†…æ ¸çš„é¦–é€‰è¯è¨€ã€‚您的程åºæ˜¯å †æŸå错误的示例,这是一个常è§çš„安全æ¼æ´žã€‚å¦‚æžœä½ å†™äº†ä¸€ä¸ªè¶³å¤Ÿé•¿çš„å—符串到那个地å€ï¼Œä½ æœ€ç»ˆä¼šè¶…å‡ºå †çš„æœ«å°¾å¹¶å¾—åˆ°ä¸€ä¸ªåˆ†æ®µé”™è¯¯ï¼Œä½†æ˜¯åœ¨ä½ é¦–å…ˆè¦†ç›–å¾ˆå¤šå…¶ä»–é‡è¦äº‹æƒ…之å‰ä¸ä¼šè¿™æ ·ã€‚
当malloc()在其ä¿ç•™æ± ä¸æ²¡æœ‰è¶³å¤Ÿçš„å¯ç”¨å†…å˜æ¥æ»¡è¶³åˆ†é…时,它会以至少4 kbçš„å—çš„å½¢å¼ä»Žå†…æ ¸ä¸æŠ“å–页é¢ï¼Œå¹¶ä¸”通常è¦å¤§å¾—å¤šï¼Œæ‰€ä»¥ä½ å¯èƒ½ä¼šå†™å…¥ä¿ç•™ä½†æ˜¯å½“ä½ æœ€åˆè¶…å‡ºä½ çš„åˆ†é…范围时,un-malloc()edç©ºé—´ï¼Œè¿™å°±æ˜¯ä½ çš„æµ‹è¯•ç”¨ä¾‹æ€»æ˜¯æœ‰æ•ˆçš„åŽŸå› ã€‚å®žé™…ä¸Šï¼Œå°Šé‡åˆ†é…地å€å’Œå¤§å°æ˜¯å®Œå…¨è‡ªæ„¿çš„ï¼Œå› æ¤æ‚¨å¯ä»¥ä¸ºæŒ‡é’ˆåˆ†é…一个éšæœºåœ°å€ï¼Œè€Œæ ¹æœ¬ä¸è°ƒç”¨malloc(),并开始将其作为å—符串使用,并且åªè¦è¯¥éšæœºåœ°å€æ°å¥½ä½äºŽä¸€ä¸ªåƒå †æˆ–å †æ ˆè¿™æ ·çš„å¯å†™å†…å˜æ®µï¼Œä¸€åˆ‡ä¼¼ä¹Žéƒ½ä¼šèµ·ä½œç”¨ï¼Œè‡³å°‘åœ¨ä½ è¯•å›¾é€šè¿‡è¿™ç§æ–¹å¼ä½¿ç”¨ä½ æ£åœ¨è…败的内å˜ä¹‹å‰ã€‚
ç”案 15 :(得分:0)
ä½ åº”è¯¥åœ¨c ++ä¸ä½¿ç”¨newå’Œdeleteè¿ç®—符...并且一个安全的指针æ¥æŽ§åˆ¶é‚£äº›æ“作没有达到分é…的数组的é™åˆ¶......
ç”案 16 :(得分:0)
å¯èƒ½æ˜¯ä½ 处于调试模å¼ï¼Œå¯¹malloc的调用实际上会调用_malloc_dbg。调试版本将分é…比您è¦æ±‚的更多空间æ¥å¤„ç†ç¼“å†²åŒºæº¢å‡ºã€‚æˆ‘æƒ³å¦‚æžœä½ åœ¨å‘布模å¼ä¸‹è¿è¡Œå®ƒï¼Œä½ å¯èƒ½ï¼ˆå¸Œæœ›ï¼‰ä¼šå‘生崩溃。