问题补充说明:#include 楼上的错的一塌糊涂的~~~~~ 首先我们来分析你这个代码要做什么事情,就是把数字123转换成字符串1360问答23 那么,你的程序当中只有一个字符型的指针变量,所以我们需要用molloc函数在内存中找到连续的一段空间,用来存放我们的数据,然后把这段空间的首地址转换成char*赋值给str,这样跑帝剧,str就相当于上伯不期理字符型数组的头指针了。 问题分析完了,那么错误在哪里呢? 就是str=(char*)malloc(sizeof(char));这里 存放字符串123,最少需要四个字节的地方,而一个char型变量占1字节,molloc里面的参数最小应该为4*sizeof(char) 然后我们再说,你这个程序为什么是运行时错误,而不是编译时错误 因为商宁从语法上面来讲,你这个程序没有任何错误,所以编译器是不会检查出错误的。运行时错误,就是因为你开辟的空间太小了,其务尔实这种错误有时也不能被发现输两宣烧南两线限难盾,为什么呢?我们下面来说明 你在内存池中动态的申请了1个字节的空间,用来存放数据,条化春线信已干越封队那么比如说,系统给你分配的空间地址为123H,而恰巧在125H处的内存被另外一个程序占用着,并且垂商铁听命被设置为其他程序不可写。那么在itoa()函数运行时,1赋值到了123H处,2到了124H处,那么当要将3赋值到125H处时,程序就会报错~~错误是什么呢?肯定是“****内存为只读,不可写”类似这样的慢今话,所以就出现了运行时错误。 那为什么有的时候这种错误被我们发现不了呢?那是因为如果此时125H以及126H都没有被其他程序所占用跟测本兵象利,那么系统还是允许你的程序对布停安曲肥死明罪充年其进行赋值的,即使这块内存不是归你的程序所特有。 在上面的情况下,就不会发生运行时错误。 所以这种错误不是你的程序每次运行实文都会报的~~~这也就是说明与你的str=NULL这句话根本没有关系,因为你的程序运行了两次,前后是没有关系的,前后系统内存的占用情况也不一样,所以导致分配到的地址可能也不同,就出现了一回报错,一回不报的情况。 综上所述,你的错误原因还是因为在动态申请内存空间的时候,地方申请小了,改法: str=(char*)mall背化个皇的露多oc(4*sizeof(char));这个是最小的要求。 所以说楼上错的简直是惨不忍睹呀~~~