SIGSEGV (Segmentation Fault) upon setting character in char array (object member var)
John Kiro
johnkirollos at gmail.com
Tue Dec 19 13:10:40 UTC 2023
Hello there,
First time to experiment with DLang, after a long time.
I'm getting a weird behavior with an **array of chars**, where I
get a segmentation fault upon writing to it (see code and output
below). What makes this problem weird it two things:
1) Why there is no problem with the **int** array (unlike the
**char** array)?
2) Why reading the array element (**charArray[index]**) works,
unlike writing to it?
The problem is gone if I uncomment the constructor code.
Code:
import std.stdio;
void main()
{
(new Test).runit();
}
class Test {
static enum MAX = 10;
uint index = 0;
auto intArray = new int[MAX];
auto charArray = new char[MAX];
this() {
/*
charArray = new char[MAX];
*/
}
void runit() {
debug writefln("IntArray initially: %s", intArray);
intArray[index] = 40; //OK
debug writefln("IntArray becomes: %s", intArray);
debug writefln("Adding char in place of (%c) at index
(%d)..",
charArray[index], index);
charArray[index] = 'a'; //ERROR: segmentation fault
(code -11)!
debug writefln("CharArray becomes %s (PROGRAM ABORTS
BEFORE IT ACTUALLY!)",
charArray);
}
}
Output:
$ dub run
Starting Performing "debug" build using
/home/john/dlang/dmd-2.106.0/linux/bin64/dmd for x86_64.
Building hello-dlang ~master: building configuration
[application]
Linking hello-dlang
Running hello-dlang
IntArray initially: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
IntArray becomes: [40, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Adding char in place of (�) at index (0)..
Error Program exited with code -11
More information about the Digitalmars-d-learn
mailing list