+ -
当前位置:首页 → 问答吧 → 字符数组给string赋值报stack overflow是什么问题?

字符数组给string赋值报stack overflow是什么问题?

时间:2011-12-05

来源:互联网

Delphi(Pascal) code

var
  i, iSize: Integer;
  SourceId: Cardinal;
  szValue1: PChar;//array[0..MAX_PATH - 1] of Char;
  szValue2: PChar;//array[0..MAX_PATH - 1] of Char;
  sValue1, sValue2: string;
begin
  iSize := MAX_PATH * SizeOf(Char);
  szValue1 := GetMemory(MAX_PATH * SizeOf(Char));
  szValue2 := GetMemory(MAX_PATH * SizeOf(Char));
  try
    for i := 0 to AList.Count - 1 do
    begin
      ZeroMemory(szValue1, iSize);
      if SetupGetSourceFileLocation(AInf, nil, PChar(AList.Strings[i]),
        SourceId, szValue1, MAX_PATH, nil) then
      begin
//        sValue1 := szValue1;
        SetLength(sValue1, lstrlen(szValue1));
        CopyMemory(@sValue1[1], szValue1, lstrlen(szValue1) * SizeOf(Char));
        ZeroMemory(szValue2, iSize);
        if SetupGetSourceInfo(AInf, SourceId, SRCINFO_PATH, szValue2,
          MAX_PATH, nil) then
        begin
//          sValue2 := szValue2;   
          //第二次循环时,此处报错,不管是直接赋值还是用CopyMemory,字符szValue为Char数组和PChar都试过。
          SetLength(sValue2, lstrlen(szValue2));
          CopyMemory(@sValue2[1], szValue2, lstrlen(szValue2) * SizeOf(Char));
        end
        else
          szValue2 := '';
        OutputDebugString(PChar(sValue2 + '\' + sValue1));
      end;
    end;
  finally
    FreeMemory(szValue1);
    FreeMemory(szValue2);
  end;
end;



SetupGetSourceFileLocation和SetupGetSourceInfo可查看msdn

作者: lght   发布时间: 2011-12-05

堆棧溢出,也就是超出了堆棧大小。

作者: Oraclers   发布时间: 2011-12-05

lz的意思应该是为什么溢出,不是翻译stack overflow

作者: notebook800   发布时间: 2011-12-05

数据传递有问题吧

作者: sgzhou12345   发布时间: 2011-12-05

引用 3 楼 sgzhou12345 的回复:

数据传递有问题吧


哪里有问题?帮忙看看,这个代码不长吧

作者: lght   发布时间: 2011-12-05

热门下载

更多