【问题标题】:Delphi 7 Dynamic Arrays LengthDelphi 7 动态数组长度
【发布时间】:2021-04-15 16:26:11
【问题描述】:

我使用动态数组来存储密钥、像素和加密像素。该程序在第一次加密期间运行顺利,但在更改图片时,程序崩溃“模块'Project2.exe'中地址00401BF1的访问冲突。写入地址 00000001'。

我认为这是因为我将setLength 程序放在加载图片按钮中。这是我加载图片后使用的代码。注意:还有真彩色图片的代码,我需要将长度设置为大 3 倍setLength(image1.picture.height * image1.picture.width * 3)。但这是加载图片按钮中灰度图片的简单方法

SetLength(ppixels, image1.picture.height * image1.picture.width);
k := 0;
for i := 0 to Image1.picture.height-1 do
begin
  PC := Image1.Picture.Bitmap.ScanLine[i];
  for j := 0 to Image1.picture.width-1 do
  begin
    ppixels[k] := PC[j];
    k := k + 1;
  end;
end;

我试图用它来操纵它

if(Length(ppixels)<0) then setLength(ppixels, image1.picture.height * image1.picture.width);

这仅适用于像素较小的图片,这不是我正在寻找的解决方案。还尝试将长度设置得非常大,例如setLength(ppixels,100000000);,但它给了我错误“内存不足”。也试过setLength(ppixels,0)ppixels := nilFinalize(ppixels),但还是没有解决问题,仍然报错。

帮我解决这个问题,大师。非常感谢~

【问题讨论】:

  • 地址 $00000000 附近的访问冲突通常意味着正在使用 nil 指针。在这种情况下,地址 $00000001 意味着当数组为空时正在访问数组的第二个字节(索引 1)。动态数组在长度为 0 时是一个 nil 指针。动态数组的 Length()永远不会

标签: delphi-7 dynamic-arrays


【解决方案1】:

我不知道如何动态设置长度,我目前最好的解决方案是使其具有较大的静态尺寸,即 75mil。所以程序只能加密小于 75m 像素的图片(彩色图片为 5000 x 5000 像素)。请为任何建议或解决方案添加答案,谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2017-11-26
    相关资源
    最近更新 更多