digitalmars.D.learn - std.format doesn't want to work
- solidstate1991 (7/7) Oct 16 2021 When I make this call
- frame (5/12) Oct 16 2021 I think it would be helpful to know what type avgFPS is and what
- russhy (3/10) Oct 16 2021 what is the type of avgFPS?
- solidstate1991 (3/14) Oct 17 2021 I's a double, but I've tried to pass it as real and float too,
- jfondren (6/21) Oct 17 2021 then it's likely that some memory corruption prior to format()
- solidstate1991 (4/10) Oct 17 2021 I ran Valgrind, and I've noticed some possible leakage in a
- Steven Schveighoffer (10/18) Oct 17 2021 FYI, solidstate figured this out. It was because of an out-of-bounds
- user1234 (7/27) Oct 18 2021 contracts ?
- Steven Schveighoffer (4/36) Oct 18 2021 Even a template may not help, if the compiler decides it's already been
When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.
Oct 16 2021
On Saturday, 16 October 2021 at 22:47:09 UTC, solidstate1991 wrote:When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.I think it would be helpful to know what type avgFPS is and what you do with the output of format(). Access violation is mostly an access to a null pointer.
Oct 16 2021
On Saturday, 16 October 2021 at 22:47:09 UTC, solidstate1991 wrote:When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.what is the type of avgFPS?
Oct 16 2021
On Sunday, 17 October 2021 at 05:22:17 UTC, russhy wrote:On Saturday, 16 October 2021 at 22:47:09 UTC, solidstate1991 wrote:I's a double, but I've tried to pass it as real and float too, with the same exact error being generated.When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.what is the type of avgFPS?
Oct 17 2021
On Sunday, 17 October 2021 at 12:53:07 UTC, solidstate1991 wrote:On Sunday, 17 October 2021 at 05:22:17 UTC, russhy wrote:then it's likely that some memory corruption prior to format() has broken the GC, and format's allocation of a string is what's failing. Try sprinkling ` safe` and and see what it complains about; try valgrind; try reducing your problem. I don't think we can help you more without a way to replicate the fault.On Saturday, 16 October 2021 at 22:47:09 UTC, solidstate1991 wrote:I's a double, but I've tried to pass it as real and float too, with the same exact error being generated.When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.what is the type of avgFPS?
Oct 17 2021
On Sunday, 17 October 2021 at 13:03:46 UTC, jfondren wrote:then it's likely that some memory corruption prior to format() has broken the GC, and format's allocation of a string is what's failing. Try sprinkling ` safe` and and see what it complains about; try valgrind; try reducing your problem. I don't think we can help you more without a way to replicate the fault.I ran Valgrind, and I've noticed some possible leakage in a library I've written, but I'll check for it further once I'll have a bit more time.
Oct 17 2021
On 10/16/21 6:47 PM, solidstate1991 wrote:When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.FYI, solidstate figured this out. It was because of an out-of-bounds index on `BitArray`. But that irks me. Why wouldn't `BitArray` do a bounds check? And then I remembered -- Phobos is built in release mode even when your app is not. I literally *cannot* request from the compiler that `BitArray` enforce its contracts without rebuilding the library completely. I never want to build code that doesn't have bounds checks. How can we fix this? -Steve
Oct 17 2021
On Sunday, 17 October 2021 at 21:00:19 UTC, Steven Schveighoffer wrote:On 10/16/21 6:47 PM, solidstate1991 wrote:contracts ? bound checks should be in the body and conditionally compiled with `version(D_NoBoundsChecks){} else {}` then same problem because it's not a function template I guess. someone should make it a function template then.When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.FYI, solidstate figured this out. It was because of an out-of-bounds index on `BitArray`. But that irks me. Why wouldn't `BitArray` do a bounds check? And then I remembered -- Phobos is built in release mode even when your app is not. I literally *cannot* request from the compiler that `BitArray` enforce its contracts without rebuilding the library completely. I never want to build code that doesn't have bounds checks. How can we fix this? -Steve
Oct 18 2021
On 10/18/21 8:35 AM, user1234 wrote:On Sunday, 17 October 2021 at 21:00:19 UTC, Steven Schveighoffer wrote:Even a template may not help, if the compiler decides it's already been instantiated. -SteveOn 10/16/21 6:47 PM, solidstate1991 wrote:contracts ? bound checks should be in the body and conditionally compiled with `version(D_NoBoundsChecks){} else {}` then same problem because it's not a function template I guess. someone should make it a function template then.When I make this call ``` format(" %3.3f"w, avgFPS); ``` my program immediately crashes with an access violation error. The debugger out is different between x86 and x86-64. I've made all sanity checks, so I need some other suggestions.FYI, solidstate figured this out. It was because of an out-of-bounds index on `BitArray`. But that irks me. Why wouldn't `BitArray` do a bounds check? And then I remembered -- Phobos is built in release mode even when your app is not. I literally *cannot* request from the compiler that `BitArray` enforce its contracts without rebuilding the library completely. I never want to build code that doesn't have bounds checks. How can we fix this?
Oct 18 2021