【发布时间】:2017-03-08 07:46:10
【问题描述】:
我尝试在函数上malloc一个数组,这个函数也可以检查内存是否足够。
第一个代码块无法工作。
当它执行“*pi = 5”时,编译器会显示这个错误信息“Thread 1: EXC_BAD_ACCESS(code=1, address=0x0) "”。
#include <stdio.h>
#include <stdlib.h>
void malloc_and_check(int *var)
{
if(!(var = (int*)malloc(sizeof(int))))
{
fprintf(stderr, "Insufficient Memory\n");
exit(EXIT_FAILURE);
}
}
int main(int argc, const char * argv[])
{
int *pi;
malloc_and_check(pi);
*pi = 5;
printf("%d", *pi);
free(pi);
}
但是,下面的代码可以正常工作。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[])
{
int *pi;
if(!(pi = (int*)malloc(sizeof(int))))
{
fprintf(stderr, "Insufficient Memory\n");
exit(EXIT_FAILURE);
}
*pi = 5;
printf("%d", *pi);
free(pi);
}
它们之间有什么区别?谢谢!
【问题讨论】:
-
你必须通过
void malloc_and_check(int **var)并用malloc_and_check(&pi);调用它另外不要强制malloc的返回 -
在
malloc失败时使用perror("malloc"); exit(EXIT_FAILURE);