最近在做从相机采集图像到内存,再显示和保存的工作。用delphi编程,分配内存时采用Allocmem函数,如下:
Allocmem(P1,2048×1536×3);
Allocmem(P2,2048×1536);
Allocmem(P3,2048);Allocmem(P4,2048×1536×3);
Allocmem(P5,2048×1536);
Allocmem(P6,2048);
发觉只有Allocmem(P1,2048×1536×3)成功,而Allocmem(P4,2048×1536×3)没有成功,因而不能控制双相机,
这是怎么回事呢?请教高手!
而在C语言中采用类似的方法分配内存,就没有问题!这是由于Delphi与C语言机制不一样吗?
十分感谢!
Allocmem(P1,2048×1536×3);
Allocmem(P2,2048×1536);
Allocmem(P3,2048);Allocmem(P4,2048×1536×3);
Allocmem(P5,2048×1536);
Allocmem(P6,2048);
发觉只有Allocmem(P1,2048×1536×3)成功,而Allocmem(P4,2048×1536×3)没有成功,因而不能控制双相机,
这是怎么回事呢?请教高手!
而在C语言中采用类似的方法分配内存,就没有问题!这是由于Delphi与C语言机制不一样吗?
十分感谢!
P1 := AllocMem(2048×1536×3);
getmem是直接申请内存区域块应该没问题.
freemem释放
"应用安全更新 MS917422 之后,可能无法运行将应用程序大小限制为 2,048 字节的程序。出现此问题时,您不会收到任何错误消息。 "
begin
GetMem(Result, Size);
FillChar(Result^, Size, 0);
end;楼主可以
try
allocmem()
except
on EOutOfMemory do
showmessage('内存错误');
end;
不好意思发贴时书写有个错误,应该是:
P1:=Allocmem(2048×1536×3);
P2:=Allocmem(2048×1536);
P3:=Allocmem(2048); P4:=Allocmem(2048×1536×3);
P5:=Allocmem(2048×1536);
P6:=Allocmem(2048);
今天与高手交流了下,应该就是codegame大姐所说的问题。因为当调用P1、P2、P3组内存时没有错误,而调用
P4、P5、P6时没能成功!要是堆空间不足,该如何处理呢!谢过大家先!
程序其它地方没有额外内存分配了,总是找不出原因!
我采用allocmemsize(好像这样的有点记不住了)这个系统参数,查看了下,
内存分配是成功的,总共有约25M左右的分配空间,但是调用的时候就不行了,只有第一组内存调用才能成功!
SetDIBitsToDevice(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,
0, 0, 0, m_pBmpInfo^.bmiHeader.biHeight,
P4, m_pBmpInfo^, DIB_RGB_COLORS);
今天我用allocmemsize和allocmemcount检查过了,
内存分配是成功的,但是调用第二组失败!
不知为何?快要疯了哦
请大家帮我仔细看看!谢谢万分!
var
P1, p2, p3, p4, p5: Pointer;
begin
Getmem(P1, 2048*1536*3);
Getmem(P2, 2048*1536);
Getmem(P3, 2048); Getmem(P4, 2048*1536*3);
Getmem(P5, 2048*1536);
if Assigned(P1) then
FreeMem(P1)
else
Caption := 'p1'; if Assigned(P2) then
FreeMem(P2)
else
Caption := Caption + 'p2';
if Assigned(P3) then
FreeMem(P3)
else
Caption := Caption + 'p3';
if Assigned(P4) then
FreeMem(P4)
else
Caption := Caption + 'p2'; if Assigned(P5) then
FreeMem(P5)
else
Caption := Caption + 'p5';
end;