C语言
C语言-动态分配内存
#define malloc
和
#undef malloc的使用
#include "alloc.h"
int main()
{
int *m, *memory, i;
m = (int *)malloc(10 * sizeof(int));
memory = MALLOC(10, int);
if (!m)
{
printf("内存分配失败");
}
for (i = 0; i < 10; i++) {
m[i] = i;
printf("%d", m[i]);
}
for (i = 0; i < 10; i++) {
memory[i] = i;
printf("%d", memory[i]);
}
return 0;
}
#include<stdio.h>
#include "alloc.h"
#undef malloc
void * alloc(size_t size)
{
void * newMem;
newMem = malloc(size);
if (!newMem) {
printf("Out of memory\n");
exit(1);
}
return newMem;
}
#include<stdlib.h> //
#include<stddef.h>
//好像是没有alloc这个函数
#define malloc
#define MALLOC(num,type) (type *)alloc((num)*sizeof(type))
extern void * alloc(size_t size);
主函数在使用malloc分配的空间时,出现了无法读取内存的错误,然而并没有像书上说的出现语法错误。
参考书:《C和指针》
当一个使用动态分配内存的程序失败时,人们很容易把问题的责任推到malloc和free函数,但它们实际上很少是罪魁祸首,事实上,问题几乎出现在你自己的程序中,而且尝尝是由于访问了内存以外的区域而造成的。