【发布时间】:2013-08-30 01:32:53
【问题描述】:
我是一个玩 memset 和指针的新手。
当我编译运行时:
main(){
int a;
int *b = (int *)malloc(5*sizeof(int));
memset(b,0, 5*sizeof(int));
if (b != NULL){
for(a=0;a<4;a++){
//b[a] = a*a;
printf
("Value of b %u\n", b[a]);
}
}
free(b);
b = NULL;
}
我可以将所有元素的值打印为 0。但是,当我将 memset 行更改为
memset(b,0, sizeof(b));
我总是得到一个具有大量数字的元素,我认为它是那个元素的地址。但是,在尝试使用以下元素同时打印地址和值时:
printf("Value of b %u and address %u\n", b[a], b+(a*sizeof(int)));
我得到两个不一样的长数字。
到底发生了什么?我是否以错误的方式使用 memset? 请告诉我是否需要附上输出截图/澄清我的问题。
谢谢!
【问题讨论】:
-
您可能应该在
for循环中使用a<5,并且您可能希望在memset之前检查NULL。并且不要在 C 中强制转换 malloc 的返回值。这是不必要的,可以隐藏细微的错误。