下面这位博主简单介绍了malloc的用法,个人觉得实用性高,如果有需要可以浏览一下。
c语言malloc函数的用法和意义_青布衫白少年的博客-CSDN博客_malloc函数的使用格式
1.上代码:简单写了个拷贝数组数据的测试代码
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
typedef struct {
char charc[128];
} test_t;
int main(int argc, char const *argv[])
{
test_t *test = NULL;
int inta[16];
int i = 0, j;
test = (test_t *)malloc(sizeof(test_t));
if (test = NULL) {
return -1;
}
printf("size: %ld\n", sizeof(inta));
while (i < sizeof(inta) / sizeof(int)) {
inta[i] = i++;
}
memset(test->charc, 0, sizeof(test->charc));
memcpy(test->charc, inta, sizeof(inta));
for (i = 0, j = 0; i < sizeof(inta) / sizeof(int); i++) {
j = i * 4;
printf("[%d] %d\n", i, inta[i]);
printf("%x %x %x %x\n", test->charc[j], test->charc[j + 1], test->charc[j + 2], test->charc[j + 3]);
}
free(test);
test = NULL;
return 0;
}
上段代码的结果是:不会返回-1,直接出现段错误。
而我把NULL换成1或其他非零数字,可以返回-1。
2.原因:
关于null的说明以及和0的区别_haiross的专栏-CSDN博客
正如上面博主说的NULL和0的关系,所以,(用的时Linux)上面代码段不返回-1;
最后出现段错误原因:用malloc开辟好了空间,p指向了那一片地址,而后面执行p=NULL,将p变成了一个空指针,所以我在使用memcpy时,不能访问已经开辟好的那一片地址,出现段错误。
3.所以我们写代码时,要时刻注意返回值的判断,以及判断条件的正确书写。