D - Array bug?
- MicroWizard (49/49) Mar 11 2004 I have found this problem. (DMD 0.81)
- C. Sauls (7/62) Mar 11 2004 Nope, no array bug, printf() bug. Change your %s specifiers to %.*s and...
I have found this problem. (DMD 0.81)
When I run this program with any arguments, it works as I expect.
But without arguments, it seems to me, that the length property of array arg can
not be queried. An exception is thrown.
Is it a bug or am I completely confused?
Best regards,
Tamás (microwizard ax.hu)
--Results-----------------------------
C:\Work\DottProp>dmd exctest.d
C:\dmd\bin\..\..\dm\bin\link.exe exctest,,,user32+kernel32/noi;
C:\Work\DottProp>exctest
Debug 1.
Debug 2.
Error occured: Error: Access Violation
C:\Work\DottProp>exctest kuka
Debug 1.
Debug 2.
Debug 3.
--exctest.d--------------------------------------------
void main(char[][] arg)
{
try
{
printf("Debug 1.\n");
if(!arg)
{
throw new Error("No args.");
}
printf("Debug 2.\n");
if(arg.length<2)
{
throw new Error("Nothing to do.");
}
printf("Debug 3.\n");
}
catch(Error e)
{
printf("Error occured: %s ... Aborting.\n",e.toString());
}
catch(Exception e)
{
printf("Exception occured: %s ... Aborting.\n",e.toString());
}
catch
{
printf("Unexpected exception occured.\n");
}
}
--Finish-------------------------------
Mar 11 2004
Nope, no array bug, printf() bug. Change your %s specifiers to %.*s and
it works fine. This is because D's strings are of arbitrary length and
not null-terminated. Your hint should have been that your "...Aborting"
message never showed up in the error report. :)
-C. Sauls
-Invironz
MicroWizard wrote:
I have found this problem. (DMD 0.81)
When I run this program with any arguments, it works as I expect.
But without arguments, it seems to me, that the length property of array arg
can
not be queried. An exception is thrown.
Is it a bug or am I completely confused?
Best regards,
Tamás (microwizard ax.hu)
--Results-----------------------------
C:\Work\DottProp>dmd exctest.d
C:\dmd\bin\..\..\dm\bin\link.exe exctest,,,user32+kernel32/noi;
C:\Work\DottProp>exctest
Debug 1.
Debug 2.
Error occured: Error: Access Violation
C:\Work\DottProp>exctest kuka
Debug 1.
Debug 2.
Debug 3.
--exctest.d--------------------------------------------
void main(char[][] arg)
{
try
{
printf("Debug 1.\n");
if(!arg)
{
throw new Error("No args.");
}
printf("Debug 2.\n");
if(arg.length<2)
{
throw new Error("Nothing to do.");
}
printf("Debug 3.\n");
}
catch(Error e)
{
printf("Error occured: %s ... Aborting.\n",e.toString());
}
catch(Exception e)
{
printf("Exception occured: %s ... Aborting.\n",e.toString());
}
catch
{
printf("Unexpected exception occured.\n");
}
}
--Finish-------------------------------
Mar 11 2004








"C. Sauls" <ibisbasenji yahoo.com>