什么时候能用到开辟动态内存空间

时间:2022-03-06 16:06:16
malloc开辟动态内存空间的大小如何决定,为什么要使用memset
int find(char *buf, char* sub) {
int len = strlen(buf);
char *p = (char*)malloc(len*2+1);
memset(p, 0x00, len*2+1);

strcpy(p, buf);
strcat(p, buf);

if ( strstr(p, sub) == NULL )
return 0;
else 
return 1;
}

10 个解决方案

#1


你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

#2


char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);

#3


malloc开辟动态内存空间的大小由你自己决定,memset函数用于初始化

#4


malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。

#5


引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点

#6


引用 4 楼 自信男孩的回复:
malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。

多谢指教,那个开辟内存刚开始申请多少

#7


引用 5 楼 spaceman_c 的回复:
Quote: 引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点

可以考虑需要多少申请多少,如果第一次申请的不够,也可以使用realloc追加

#8


引用 2 楼 focuslight的回复:
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);

strcpy (p,arr);
strcat(p,arr)
所以是len*2+1
不知道对不对

#9


引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

懂了,,多谢指教。。。

#10


比如你定义一个数组,char str[5];这是可以的,如果你定义一个char str[num];那就是不可以的(新标准可能可以)也就是里边的数量不能是变量,这个时候就需要动态创建这个数组了,memset是将内存初始化为某个值,相当于你申请了一块地,需要自己修整一下,才能使用

#1


你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

#2


char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);

#3


malloc开辟动态内存空间的大小由你自己决定,memset函数用于初始化

#4


malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。

#5


引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点

#6


引用 4 楼 自信男孩的回复:
malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。

多谢指教,那个开辟内存刚开始申请多少

#7


引用 5 楼 spaceman_c 的回复:
Quote: 引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点

可以考虑需要多少申请多少,如果第一次申请的不够,也可以使用realloc追加

#8


引用 2 楼 focuslight的回复:
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);

strcpy (p,arr);
strcat(p,arr)
所以是len*2+1
不知道对不对

#9


引用 1 楼 pwanbul的回复:
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!

懂了,,多谢指教。。。

#10


比如你定义一个数组,char str[5];这是可以的,如果你定义一个char str[num];那就是不可以的(新标准可能可以)也就是里边的数量不能是变量,这个时候就需要动态创建这个数组了,memset是将内存初始化为某个值,相当于你申请了一块地,需要自己修整一下,才能使用