读书人

下面这段代码有什么有关问题?错在哪

发布时间: 2012-06-10 14:03:15 作者: rapoo

下面这段代码有什么问题?错在哪?
请大家帮忙看看下面这段代码哪里有错误

#include<stdio.h>

int main()
{
unsigned long i = 0, *p, *p1;
p = (unsigned long*)malloc(10000);
p1 = p;
for(i=0; i<9999; i++)
{
*p1 = 0x100;
p1++;
}
printf("over!\n");
free(p);

}

[解决办法]
是这样的, malloc()的参数单位是字节,你分配10000个字节, 而定义的是无符号long型指针,在32位机上指针
自增是4个字节,所以for循环中不能是9999次,而是10000/4 也就是循环2500次,回答完毕!
[解决办法]
p = (unsigned long*)malloc(10000*sizeof(unsigned long));

//10000小了
[解决办法]
malloc 的内存不够
[解决办法]
2,3楼正解
[解决办法]

探讨

引用:

是这样的, malloc()的参数单位是字节,你分配10000个字节, 而定义的是无符号long型指针,在32位机上指针
自增是4个字节,所以for循环中不能是9999次,而是10000/4 也就是循环2500次,回答完毕!

谢谢啊,明白了,是不是循环2500次之后,程序就停在那啊,不然后面的打印输出没显示

[解决办法]
探讨

引用:

是这样的, malloc()的参数单位是字节,你分配10000个字节, 而定义的是无符号long型指针,在32位机上指针
自增是4个字节,所以for循环中不能是9999次,而是10000/4 也就是循环2500次,回答完毕!

谢谢啊,明白了,是不是循环2500次之后,程序就停在那啊,不然后面的打印输出没显示

读书人网 >C语言

热点推荐