什么是“空指针赋值错误â€ï¼Ÿ

时间:2010-05-04 07:45:10

标签: c pointers

关于C指针here的求èŒé¢è¯•é—®é¢˜ä¹‹ä¸€å¦‚下:什么是空指针赋值错误?

我用谷歌æœç´¢äº†ä¸€æ®µæ—¶é—´ï¼Œæ²¡æœ‰çœ‹åˆ°ä»»ä½•åˆç†çš„解释。那是什么?试图通过空指针写?æŸç§æž¶æž„或环境特定的东西?究竟是什么错误?

5 个答案:

答案 0 :(得分:20)

http://www.faqs.org/qa/qa-3786.html

  

NULL指针赋值是è¿è¡Œæ—¶é”™è¯¯   它的出现是由于å„ç§åŽŸå› å¯¼è‡´æ‚¨çš„程åºè¯•å›¾è®¿é—®éžæ³•å†…å­˜ä½ç½®ã€‚      éžæ³•ä½ç½®æ„味ç€ä½ç½®ä½äºŽæ“作系统地å€ç©ºé—´æˆ–其他进程内存空间中。     在stdio.h中,NULL定义为0     因此,æ¯å½“您的程åºå°è¯•è®¿é—®ç¬¬0个ä½ç½®æ—¶ï¼Œæ“作系统会因è¿è¡Œæ—¶åˆ†é…错误而导致程åºæ­»äº¡ï¼Œå› ä¸ºç¬¬0个ä½ç½®ä½äºŽæ“作系统地å€ç©ºé—´ä¸­ï¼Œæ“作系统ä¸å…许用户程åºè®¿é—®å…¶åœ°å€ç©ºé—´ã€‚

示例代ç ï¼š

int* ptr = NULL;  
*ptr = 3;

<强>解释
在几乎æ¯ä¸ªç³»ç»Ÿä¸Šï¼Œåœ°å€0都被ä¿ç•™ã€‚系统ä¸å…许您写入该ä½ç½®ã€‚如果您å°è¯•ï¼Œæ‚¨å°†èŽ·å¾—è¿è¡Œæ—¶å¼‚常(访问冲çªï¼Œsegmentation fault等)。

答案 1 :(得分:1)

我实际上无法回想起æºä»£ç ï¼Œä½†æ ¹æ®æºä»£ç ï¼Œæ­¤è¿è¡Œæ—¶é”™è¯¯ä»…é™äºŽç›¸åº”编译器投入使用的中å°åž‹å†…存模型。你看,如å‰æ‰€è¿°ï¼Œç©ºæŒ‡é’ˆå®žé™…上并ä¸æŒ‡å‘零,实际上ä¸åŒçš„编译器使用ä¸åŒä½†å›ºå®šçš„内存ä½ç½®æ¥ç”¨ä½œç©ºæŒ‡é’ˆã€‚

让我们考虑TC编译器的情况,这个编译器在数æ®æ®µçš„底部放置四个零字节和TC版æƒå£°æ˜Žã€‚ TC还使用DS:0000ä½ç½®ï¼Œæ•°æ®æ®µåº•éƒ¨ä¸ºç©ºæŒ‡é’ˆä½ç½®ã€‚因此,为这个空指针赋值,将会实际改å˜å››ä¸ªå­—节,并å¯èƒ½æžä¹±ç‰ˆæƒå£°æ˜Žã€‚

现在,在程åºç»ˆæ­¢æ—¶ï¼Œå°†æ£€æŸ¥å››ä¸ªé›¶å’Œç‰ˆæƒæ ‡é¢˜ä»¥è¿›è¡Œä»»ä½•ç±»åž‹çš„更改。如果å‘现任何更改,则会生æˆNull Pointer Assignment错误。

所以,我认为它ä¸ä»…仅是空指针,任何狂野的指针,如果试图访问æŸäº›å…³é”®åŒºåŸŸï¼Œä½ ä¼šé‡åˆ°ç©ºæŒ‡é’ˆèµ‹å€¼é”™è¯¯ã€‚

答案 2 :(得分:0)

在许多情况下,您å¯ä»¥çœ‹åˆ°é—®é¢˜ã€‚但关键是,你没有正确分é…内存。è¿è¡Œç¨‹åºåŽï¼Œä»¥ä¸‹ä»£ç å°†ç”ŸæˆNull指针赋值错误消æ¯ã€‚注æ„:它将正确编译。

void CopyMessage(char *p)
{
    strcpy(p, "welcome");
}

void main()
{
   char *src;
   CopyMessage(src);
}

答案 3 :(得分:0)

当您å°è¯•æŒ‡å‘éžæ³•å†…存空间(通常是为æ“作系统ä¿ç•™çš„地å€0)时,会å‘生è¿è¡Œæ—¶é”™è¯¯ã€‚

答案 4 :(得分:-1)

2018-10-15:é‡å†™

我对这个答案的æ„图是对空指针的最基本概念的补充。在许多地方列出的这个最简å•çš„定义是æ¯å½“指å‘地å€çš„基值被赋值为&#39; 0&#39;或NULL值,因为零页é¢ï¼Œç¬¬0个内存ä½ç½®æ˜¯æ“作系统地å€ç©ºé—´çš„一部分,æ“作系统ä¸å…许用户程åºè®¿é—®å…¶åœ°å€ç©ºé—´ã€‚在这ç§æƒ…况下,预编译器或编译器å¯èƒ½ä¼šç”Ÿæˆé”™è¯¯ï¼Œæˆ–者æ“作系统本身在è¿è¡Œæ—¶å¯èƒ½ä¼šå› å†…存访问冲çªè€Œç”Ÿæˆé”™è¯¯ã€‚

以下对空指针的讨论基于编程中包å«çš„概念,这些概念å‘生在å…许精确控制的语言的机器级别,并且需è¦äº†è§£å¦‚何处ç†å˜é‡ç©ºé—´ã€‚

大多数高级语言和编译器都å¯ä»¥ä½¿ç”¨é€‚当的&#39;类型æ¥é˜²æ­¢è¿™ç§æƒ…况å‘生。转æ¢ï¼Œå¹¶æŒ‡å®šä¸€ä¸ªé€‰é¡¹åº“,并在索引编制中ä¸åšä»»ä½•ç²¾ç¥žé”™è¯¯è®¡ç®—。 &#39; C&#39;作为一ç§è¯­è¨€ï¼Œåœ¨æ²¡æœ‰æŒ‡å®šæœ€ä¸¥æ ¼çš„编译器å‚数的情况下,特别容易出现这些类型的错误,以åŠå¦‚今在å£è¢‹é‡Œæ‰¾åˆ°çš„ä¸å¤ªå¤æ‚的基于机器的编译器或编程语言。处ç†å™¨ã€‚

然而,自计算机和编程语言开始以æ¥ï¼Œé›¶æŒ‡é’ˆé”™è¯¯çš„概念已扩展为包å«æŒ‡å‘任何å—ä¿æŠ¤å†…å­˜ä½ç½®ä¸­ç¬¬0个ä½ç½®çš„任何指针。但尤其是在å¯ä»¥ç”¨äºŽæŒ‡å‘任何内存ä½ç½®çš„内存ä½ç½®å¦‚何被无æ„中覆盖以包å«ç©ºå€¼çš„上下文中。在这里,我考察了这个概念,因为我称之为“1&#39;的错误â€ã€‚当程åºå‘˜å¿…须在选项库&#39; 0&#39;之间切æ¢æ—¶ä¼šå‘生这ç§æƒ…况。或选项基础&#39; 1&#39;。这是一个计数问题,我们开始计算&#39; 0&#39;或者&#39; 1&#39;如:

Option Base 0
[0,1,2,..,9] or 

Option Base 1 
[1,2,3,...,10]

表示包å«10个元素的数组。错误1å¯èƒ½ä¼šå¯¼è‡´é”™è¯¯è®¡ç®—,从而导致指å‘第一个存储ä½ç½®çš„指针在&#39;之å‰ã€‚数组,

Option Base 1 
0[1,2,3,...,10]
^
|Last memory location of another variable space 'before' this variable space

或者&#39;之åŽçš„第一个ä½ç½®æ ¹æ®å®šä¹‰è¶…出界é™çš„数组。

Option Base 0 
[0,1,2,...,9]10
             ^
             |First memory location of another variable after this variable

但是,当处ç†ä½¿ç”¨ç›´æŽ¥å†…存访问的编程时,如在任何语言的原始机器代ç ä¸­ï¼Œ1的错误å¯èƒ½æ˜¯æ‚²å‰§æ€§çš„,将一个éžé¢„期的值放在预期范围之外的存储ä½ç½®ï¼Œåœ¨å˜é‡çš„情况下空间和使用指针是在预期å˜é‡ä¹‹å‰æˆ–之åŽçš„å˜é‡ç©ºé—´ï¼Œå½“åˆå§‹åŒ–或清除数组时,会创建一个“空â€ï¼†ï¼ƒ39;或者在ä¸å¸Œæœ›çš„ä½ç½®ä¸º0,特别是如果它是一个指针数组,则在éžé¢„期的å˜é‡ä¸­å‡ºçŽ°ç©ºæŒ‡é’ˆé”™è¯¯ã€‚这当然å–决于å¯å˜ç©ºé—´çš„结构和/或类型。如果å˜é‡æˆ–其他存储地å€ç©ºé—´åµŒå¥—在代ç ä¸­ï¼Œåˆ™ä¼šç‰¹åˆ«éº»çƒ¦ã€‚正如我先å‰æ‰€è¿°ï¼Œè®¸å¤šé«˜çº§è¯­è¨€ç¼–译器å¯ä»¥ç»•è¿‡å¤§å¤šæ•°æ­¤ç±»é”™è¯¯;但是,当在机器代ç ä¸­ç¼–写特定å­ç¨‹åºæ—¶ï¼Œæ— è®ºå‡ºäºŽä½•ç§åŽŸå› è®¤ä¸ºå¿…è¦ï¼Œå¿…须特别注æ„ç¡®ä¿é€‰é¡¹åº“明确定义并通过实践éµå®ˆï¼Œå¦‚æžœä¸æ˜¯ç¼–译器约定。

首先,程åºå‘˜è®¤è¯†åˆ°ç¨‹åºå’Œå­˜å‚¨åŒºåŸŸéƒ½æ˜¯æ˜Žç¡®å®šä¹‰çš„å¿…è¦æ€§ï¼Œæ²¡æœ‰æ˜Žç¡®åŒæ„,任何东西都ä¸åº”该修改一个数æ®ä½ã€‚这对于空指针是至关é‡è¦çš„,因为在æ“作系统的零页é¢åŒºåŸŸä¸­çš„第0个存储器ä½ç½®é€šå¸¸ç”¨äºŽå­˜å‚¨å †æ ˆï¼Œè¯¥å †æ ˆæ˜¯è¢«æŽ¨å…¥å †æ ˆä»¥è¿›è¡Œè¿”回æ“作的存储器ä½ç½®ã€‚系统调用是å¦ç”±äºŽå¯å±è”½æˆ–ä¸å¯å±è”½çš„中断而推é€è¿”回æ“作的地å€ï¼ˆä»Žç³»ç»Ÿä¸­æ–­çš„ä½ç½®å¼¹å‡ºè¿”回地å€ï¼‰ï¼Œæˆ–者因为程åºå‘˜æƒ³è¦æŽ¨é€æ•°æ®æˆ–内存ä½ç½®ç¨åŽä»Žè¿™ä¸ªå †æ ˆå¼¹å‡ºã€‚这是一个ä¿æŠ¤åŒºã€‚åƒä»»ä½•æŒ‡å‘有效内存地å€çš„指针一样,人们ä¸å¸Œæœ›å†™å…¥é”™è¯¯çš„ä½ç½®ï¼Œå¦‚果被覆盖,则第0个ä½ç½®ç‰¹åˆ«å®¹æ˜“å—到影å“,因为å˜é‡é€šå¸¸ä¸ºç©ºæˆ–者从åˆå§‹ä¸Šç”µçŠ¶æ€çš„值为0,因此å˜é‡ä¸Šç”µåŽæœªæ˜Žç¡®å®šä¹‰æˆ–有æ„åˆå§‹åŒ–çš„å¯èƒ½ä¸ºé›¶ã€‚

如果堆栈在零页é¢æˆ–任何包å«è¿”回地å€çš„堆栈中,如果值被压入堆栈,并且在返回&#39;之å‰æ²¡æœ‰å¼¹å‡ºã€‚é‡åˆ°ï¼Œè¿”回值å¯ä»¥ä¸ºnull或零,返回值指å‘堆栈的内存ä½ç½®ã€‚这是一个空指针错误,它å¯èƒ½ä¸ä¼šç”Ÿæˆé”™è¯¯ï¼Œä½†ä¼šå°†ä»£ç æŒ‡é’ˆè¿”回到ä¸åŒ…å«ä»£ç çš„区域,例如堆栈的中间ä½ç½®ã€‚这些æ¼æ´žåˆ©ç”¨ä¼—所周知,常常用于破å系统安全性的方法,以便ä¸é‚£ä¹ˆä¸¥æ ¼çš„破解者获å–访问æƒé™;或者å¯ä»¥ç”¨äºŽç‰¹æ®Šæƒ…况下的巧妙访问,或者当æ„外造æˆéš¾ä»¥ç¡®å®šæ¥æºçš„å„ç§æ¶ä½œå‰§æ—¶ã€‚

正如我所说,这个æ述超出了空指针错误的传统定义,但它ä»ç„¶å¯ä»¥äº§ç”Ÿä¸€ä¸ªç©ºæŒ‡é’ˆï¼Œå°½ç®¡æ›´å¸¸äº§ç”Ÿå…¶ä»–错误,或者根本没有。它通常没有表明它的存在,除了“如果或何时â€ã€‚程åºæ— æ³•æŒ‰é¢„期执行。

这里我æ供了é¢å¤–çš„éžå¸¸è§„示例和空指针赋值错误的潜在æ¥æºçš„定义,而ä¸æ˜¯å®šä¹‰ä¼ ç»Ÿçš„ç†è§£ï¼Œè¿™åœ¨ç¼–程约定中比编程逻辑中的错误更多是错误。

è¿™ç§ç±»åž‹çš„错误(未定义或null)éžå¸¸ç½•è§ã€‚但现代节目的å£è¢‹ï¼†ï¼ƒ39;处ç†å™¨ï¼Œä½¿ç”¨åƒArduino,Raspberry PI,AMD或任何其他计算机片上编程的å°å¼è®¾å¤‡ä»¥å„ç§å½¢å¼å­˜åœ¨ï¼Œå…¶ä¸­è®¸å¤šå½¢å¼ä»Šå¤©å¦‚åŒä»¥å‰ä¸€æ ·ç®€å•ï¼Œè¿™ä¸ªç©ºæŒ‡é’ˆé—®é¢˜ä»Šå¤©ä»ç„¶å­˜åœ¨å¹¶ä¸”å¯èƒ½å‘生å³ä½¿åœ¨æœ€å¤æ‚的系统中也是如此。此外,构建自己的å˜é‡æˆ–æ•°æ®ç»“æž„çš„å…¬å¸å¯èƒ½ä¹Ÿæ˜¯çŽ°åœ¨æœ€å®¹æ˜“看到此类型错误的人。目的是展示å¯ä»¥å¸®åŠ©è¯†åˆ«çš„例å­ã€‚

正如在旧时所定义的那样,很快就认识到产生空指针错误的æ¡ä»¶ä¹Ÿå¯èƒ½äº§ç”Ÿé”™è¯¯ï¼Œå…¶ä¸­æŒ‡é’ˆçš„值被无æ„修改。然åŽï¼Œä½œä¸ºä¸€ä¸ªå˜é‡ï¼Œå®ƒè¢«ç”¨ä½œæŒ‡é’ˆå¹¶ä¸”在没有程åºå‘˜çš„æ„图或知识的情况下被覆盖,这å¯èƒ½æ˜¯ç©ºçš„,但也å¯ä»¥æ˜¯ä»»ä½•å…¶ä»–值。因此,我们å‘现å¯ä»¥åˆ›å»ºç©ºæŒ‡é’ˆçš„问题也å¯ä»¥åˆ›å»ºéžnull 指针。空指针是一ç§ç‰¹æ®Šæƒ…况,OFTEN创建系统错误消æ¯;但是,当这些相åŒçš„æ¡ä»¶å¯¼è‡´æŒ‡é’ˆé‡‡ç”¨éšæœºæˆ–未确定的值而ä¸æ˜¯æ•°æ®åº”驻留的原始地å€æ—¶ï¼Œå®ƒçŽ°åœ¨åŒ…å«ä¸€ä¸ªç©ºæˆ–未知地å€ï¼Œå¯¼è‡´æ•°æ®ç§»åŠ¨æˆ–存储到无效或ä¸éœ€è¦çš„ä½ç½®è¦†ç›–和破å该代ç æˆ–æ•°æ®ã€‚

大多数人都会ç†æ‰€å½“然地认为这个是 NOT 一个空指针错误;并且,它们完全100%正确ï¼ä½†æ˜¯ï¼Œæ­¤é”™è¯¯çš„æ ¹æºé€šå¸¸ä¼šåˆ›å»ºå¥‡æ€ªçš„常è§ç©ºæŒ‡é’ˆé”™è¯¯ï¼Œå› ä¸ºæ›´å¤šæ—¶å€™æŒ‡é’ˆå°†åŒ…å«ä¸€ä¸ªï¼†ï¼ƒ39; null&#39;ï¼å®šä¹‰ä¸­è¿™ä¸ªç»ƒä¹ çš„è¦ç‚¹æ˜¯æŒ‡å‡ºå¦‚何创建空指针也会导致问题似乎没有指出问题的原始æºã€‚ IOW,在概念上没有指å‘问题的指针。因为与奇数&#39; null&#39;的创造有关系。指针问题,并且在这ç§æƒ…况下,éšåŽç¼ºå°‘指å‘错误æºçš„æ•°æ®ï¼Œå› ä¸ºæŒ‡é’ˆæ˜¯ NOT null而是未定义&#39;从自上而下的编程转å˜ä¸ºé¢å‘对象的事件驱动编程的旧计时器识别出这ç§å…³ç³»ï¼Œå¹¶è®¤è¯†åˆ°è¿™ç§ç±»åž‹çš„“零â€ã€‚指å‘错误似乎没有å¯å®šä¹‰çš„æ¥æºã€‚

由于此类型失败,æŸåçš„æ•°æ®æˆ–æŸå的代ç å¯èƒ½æ— æ³•åœ¨ç§»åŠ¨åˆ°çŽ°æœ‰æœªä½¿ç”¨çš„内存ä½ç½®æ—¶ç«‹å³æ‰§è¡Œæˆ–使用。但是,当代ç æˆ–æ•°æ®åœ¨è¿è¡Œçš„ç¨åŽæ—¶é—´ç¡®å®žå¯¼è‡´é—®é¢˜æ—¶ï¼Œæ²¡æœ‰å…³äºŽâ€œçœŸå®žâ€çš„ä¿¡æ¯ã€‚错误的ä½ç½®ï¼Œå› ä¸ºå®ƒä»Žå¯¼è‡´å®ƒçš„事件中移除了很多。无论是创建还是分é…空指针还是创建其他æŸå,它都会修改代ç ï¼Œäº‹æƒ…会å˜å¾—怪异,真的很奇怪。

总而言之,我将空指针定义为用于指å‘内存ä½ç½®çš„任何空或未定义地å€ï¼Œè€Œä¸ç®¡æœ€åˆåˆ›å»ºå®ƒçš„ä½ç½®ã€‚å¯ä»¥ä¸ºæ­¤é—®é¢˜å’Œç¤ºä¾‹åˆ†é…空指针分é…错误或许多其他错误。

在更简å•çš„体系结构或编程环境中,它å¯ä»¥å¼•ç”¨æ— æ„中最终创建空值作为指针的任何代ç ï¼Œæˆ–者创建一个无论如何都会åœæ­¢æ‰§è¡Œçš„错误,比如覆盖返回堆栈中的一个字节,覆盖代ç ï¼Œä»£ç ä¸å°å¿ƒå­˜æ”¾äº†ä¸€ä¸ªï¼†ï¼ƒ39; 0&#39; 0在错误的ä½ç½®ï¼ŒçŽ°æœ‰çš„代ç ï¼Œæˆ–者åªæ˜¯ä½œä¸ºé”™è¯¯ä½ç½®çš„æ•°æ®ï¼Œè€Œä¸ä»…仅是地å€ã€‚

所以,虽然上é¢çš„例å­ï¼Œå¯ä»¥æ­£å¸¸å·¥ä½œæ¥å®šä¹‰ä¸€ä¸ªç©ºæŒ‡é’ˆçš„例å­ã€‚所以我们扩展了这个概念,空指针是任何被用作å˜é‡æŒ‡é’ˆçš„指针,并且由于多ç§åŽŸå› ä¸­çš„任何一个原因,该å˜é‡çš„地å€ä½ç½®çŽ°åœ¨åŒ…å«ä¸€ä¸ªï¼†ï¼ƒ39; null&#39;或者任何éžé¢„期的值,导致它指å‘ä¸å—欢迎的内存ä½ç½®ï¼Œæ— è®ºå®ƒæ˜¯å¦‚何到达的,而ä¸ä»…仅是编程逻辑中的错误或数学计算错误。 IOW,ä¸ä»…仅是指针中的0;更具体地说, 内存ä½ç½®ä¸æ˜¯ç‰¹å®šç›®æ ‡çš„任何内存ä½ç½®çš„零或未定义值,并且在其他情况下具有其现在将执行的OTHER目的ï¼

所以,最åŽï¼Œä¸€ä¸ªäººå¯ä»¥å¾—到一个空指针错误,并在检查指针时å‘现它包å«ä¸€ä¸ªnull;但是,找ä¸åˆ°å°†null放入指针或分é…它的代ç ã€‚这是空指针赋值错误的最广泛定义,并且ç»å¯¹æ˜¯ 空指针错误的最å情况。当在大型程åºä¸­å‘生这ç§æƒ…况时,它通常会导致程åºæ­»äº¡ï¼Œå› ä¸ºå¦‚果错误存在于以å‰çš„版本中,而是写入以å‰å¯è®¿é—®ä½†æœªåˆ†é…çš„éžé¢„期内存ä½ç½®ï¼ˆå…许程åºè¿è¡Œæˆ–IOW)在早期版本中,错误在程åºæ‰©å±•ä¹‹å‰ä¸è¢«æ³¨æ„,现在曾ç»ä»¥å‰æœªä½¿ç”¨çš„内存ä½ç½®åŒ…å«æ–°ä»£ç æˆ–æ•°æ®ï¼Œè¿™å…许旧错误现在在新代ç ä¸­ç”Ÿæˆéšæœºé”™è¯¯æˆ–ç ´åæ•°æ®ï¼

例如:在早期版本中,错误的地å€å€¼ä¼šå¯¼è‡´æ•°æ®è¢«å†™å…¥å®šä¹‰çš„å˜é‡ç©ºé—´ä¹‹å¤–,但是因为正在编写数æ®å¹¶ä¸”正在读å–æ•°æ®ï¼Œä»¥åŠç¨‹åºå’Œæ‰€æœ‰å†…容,因此几个版本都没有注æ„到这些数æ®ï¼†ï¼ƒ39;显示&#39;好ï¼ä½†æ˜¯ï¼Œéšç€ç¨‹åºçš„扩展,新代ç çŽ°åœ¨å­˜åœ¨äºŽç›¸åŒçš„相对地å€ç©ºé—´ä¸­ï¼Œè€ŒåŽŸå§‹æ—§é”™è¯¯é”™è¯¯åœ°å†™å…¥é”™è¯¯çš„内存ä½ç½®å¹¶ä¸”没有人注æ„到的内存,无论是一个字节还是整个数æ®å—ï¼ä½†æ˜¯ï¼ŒçŽ°åœ¨ï¼Œé‚£é‡Œå­˜åœ¨æ–°çš„代ç ã€‚当程åºè¿è¡Œè¯¥ç‰¹å®šä»£ç æ—¶ï¼Œæ— è®ºä»Šå¤©æˆ–明天调用包å«å®ƒçš„任何函数,新数æ®éƒ½ä¼šè¢«æ—§çš„未å‘现的错误所破å。

寻找原作&#39;一年å‰å­˜åœ¨çš„错误现在几乎(如果ä¸æ˜¯å®Œå…¨çš„è¯ï¼‰ä¸å¯èƒ½æ‰¾åˆ°ã€‚

管ç†å‘˜å’Œå¼€å‘人员逻辑通常è¦æ±‚,我为什么è¦çœ‹é‚£é‡Œï¼Œæˆ‘们知é“代ç è¿è¡Œå¹¶ä¸”在最åŽå‡ ä¸ªç‰ˆæœ¬ä¸­è¿è¡Œè‰¯å¥½ã€‚但是,现在,新代ç çš„一部分ä¸èµ·ä½œç”¨ï¼Œä¸»è¦éƒ¨åˆ†è¢«æ‰“破。我们看起æ¥å’Œå¤–观,没有找到任何东西。好åƒé”™è¯¯ä¸å­˜åœ¨ï¼Œä½†å®ƒç¡®å®žå­˜åœ¨ã€‚造æˆå®ƒçš„是什么,è°æ€€ç–‘多年å‰ç¼–写的代ç ï¼Ÿç©ºå¼•å¯¼å’Œè®¸å¤šå…¶ä»–错误也是由此引起的。通过ç†è§£ï¼Œä»¥åŠå¯ä»¥ç›´æŽ¥æ£€æŸ¥ä»£ç çš„良好编辑器,适当的监视器å¯ä»¥ç›‘视修改åŽçš„内存ä½ç½®ï¼Œè§¦å‘æš‚åœä»¥ç¡®å®šæ­£ç¡®æ‰§è¡Œçš„代ç ï¼Œç”šè‡³å¯ä»¥æ‰¾åˆ°ã€‚

也许这个答案是错误的,并且å¯ä»¥æ›´å¥½åœ°åˆ—在其他地方。主æŒäººï¼Ÿæˆ–许,有人担心因为这个答案&#39;ä¸è¢«è®¤ä¸ºæ˜¯ç›¸å…³çš„,因为对使用“#34;赋值â€è¿™ä¸ªè¯æœ‰ä¸€äº›æ‹…忧。在问题中,æ„æ€æ˜¯æ•…æ„分é…。但是,转让的概念ä¸éœ€è¦çŸ¥è¯†æˆ–åŒæ„。算法或代ç å¯ä»¥èµ‹å€¼ã€‚空指针å¯ä»¥é€šè¿‡å¤šç§æ–¹å¼åˆ›å»ºï¼Œè¿™é‡Œçš„示例å¯èƒ½æ˜¯ä¼ ç»Ÿç†è§£å¯¼è‡´é”™è¯¯çš„原因之外的最常è§æŒ‡é’ˆï¼Œè€Œé”™è¯¯ä¼¼ä¹Žæ— å¤„å¯å¯»ã€‚我个人已ç»çœ‹åˆ°è¿™æ ·çš„错误会æ€æ­»æ•´ä¸ªäº§å“系列。最终æ¥è‡ªä¸€ç¾¤ç”¨æˆ·çš„喧嚣与他们最喜欢的产å“中ä¸å›ºå®šçš„虫å­çš„æŒç»­å­˜åœ¨æ„Ÿåˆ°ä¸å®‰;旧产å“报废了,一个新产å“从头开始创造......

看æ¥æ­¤ä¿¡æ¯åŒ…å«ï¼†ï¼ƒ39; a&#39;地方,并作为答案包括在这里。积æžçš„富有æˆæ•ˆçš„å馈或建议是值得赞èµçš„,而ä¸æ˜¯ç®€å•çš„投票,如果有人关心评论,或许元讨论是有åºçš„?

å¹²æ¯ã€‚