digitalmars.D.learn - Working with pointers/adresses
- Quantium (7/7) Jul 08 2020 I'm learning now memory usage in D, and I have the problem that I
- Paul Backus (12/19) Jul 08 2020 import std.stdio;
- Quantium (3/3) Jul 09 2020 I have one more question. I tested the programm, as you said, it
- H. S. Teoh (5/8) Jul 09 2020 No, it's subject to the same restrictions. Why should it be otherwise?
- Paul Backus (4/7) Jul 09 2020 The OS restrictions don't care whether your program is in a dll
- matheus (12/24) Jul 09 2020 I wonder if the question was more like intended to display the
- matheus (11/37) Jul 09 2020 Or maybe he wanted to do this:
- H. S. Teoh (7/20) Jul 09 2020 [...]
I'm learning now memory usage in D, and I have the problem that I can't solve. The problem is (The third step): 1) Programm gets number (In int format) as input data. 2) Integer is converted to HEX 3) Programm gets the data in 0x<Integer converted to HEX> memory slot and writes it in the console.
Jul 08 2020
On Wednesday, 8 July 2020 at 19:48:07 UTC, Quantium wrote:I'm learning now memory usage in D, and I have the problem that I can't solve. The problem is (The third step): 1) Programm gets number (In int format) as input data. 2) Integer is converted to HEX 3) Programm gets the data in 0x<Integer converted to HEX> memory slot and writes it in the console.import std.stdio; void main() { int i; readf("%d\n", i); // read a number ubyte* p = cast(ubyte*) i; // convert it to a pointer writeln(*p); // write the data at that address to the console } Note that this program will almost certainly crash if you try to run it, since modern computers do not allow programs to read and write arbitrary memory locations.
Jul 08 2020
I have one more question. I tested the programm, as you said, it worked rarely because of OS restrictions. If I compile that code to dll, and run it through dll launcher, should it work?
Jul 09 2020
On Thu, Jul 09, 2020 at 04:16:53PM +0000, Quantium via Digitalmars-d-learn wrote:I have one more question. I tested the programm, as you said, it worked rarely because of OS restrictions. If I compile that code to dll, and run it through dll launcher, should it work?No, it's subject to the same restrictions. Why should it be otherwise? T -- Let's call it an accidental feature. -- Larry Wall
Jul 09 2020
On Thursday, 9 July 2020 at 16:16:53 UTC, Quantium wrote:I have one more question. I tested the programm, as you said, it worked rarely because of OS restrictions. If I compile that code to dll, and run it through dll launcher, should it work?The OS restrictions don't care whether your program is in a dll or not, so you will get more or less the same results (though the specific addresses that do and don't work might change).
Jul 09 2020
On Wednesday, 8 July 2020 at 20:33:39 UTC, Paul Backus wrote:import std.stdio; void main() { int i; readf("%d\n", i); // read a number ubyte* p = cast(ubyte*) i; // convert it to a pointer writeln(*p); // write the data at that address to the console } Note that this program will almost certainly crash if you try to run it, since modern computers do not allow programs to read and write arbitrary memory locations.I wonder if the question was more like intended to display the value using pointers, ie: import std.stdio; void main(){ int i; readf("%d\n", i); int *p = &i; writeln(*p); } Because accessing arbitrary memory location seems very weird. Matheus.
Jul 09 2020
On Thursday, 9 July 2020 at 17:24:33 UTC, matheus wrote:On Wednesday, 8 July 2020 at 20:33:39 UTC, Paul Backus wrote:Or maybe he wanted to do this: import std.stdio; void main(){ int i; readf("%d\n", i); ulong address = cast(ulong)&i; ubyte* p = cast(ubyte*)address; writeln(*p); } Matheus.import std.stdio; void main() { int i; readf("%d\n", i); // read a number ubyte* p = cast(ubyte*) i; // convert it to a pointer writeln(*p); // write the data at that address to the console } Note that this program will almost certainly crash if you try to run it, since modern computers do not allow programs to read and write arbitrary memory locations.I wonder if the question was more like intended to display the value using pointers, ie: import std.stdio; void main(){ int i; readf("%d\n", i); int *p = &i; writeln(*p); } Because accessing arbitrary memory location seems very weird. Matheus.
Jul 09 2020
On Thu, Jul 09, 2020 at 05:24:33PM +0000, matheus via Digitalmars-d-learn wrote: [...]I wonder if the question was more like intended to display the value using pointers, ie: import std.stdio; void main(){ int i; readf("%d\n", i); int *p = &i; writeln(*p); } Because accessing arbitrary memory location seems very weird.[...] Unless the goal was to write an OS? ;-) T -- It only takes one twig to burn down a forest.
Jul 09 2020