私はポインターで遊んでいて、それらの理解を固めるためにいくつかの基本的なことをしているだけです。GDBの「next」と「step」を使用してWebで見つけたこの例をデバッグして従うと、GDBは関数の最後から実行されます。ステートメント「return0;」に達した後。「start()のアドレス0x00x0000000100000de4のメモリにアクセスできません。
これはコードです:
#include <cstdio>
#include <ctype.h>
int main()
{
char my_str[] = "hello world";
*my_str = toupper(*my_str);
*(my_str + 6) = toupper(*(my_str + 6));
printf("%s", my_str); // prints, "Hello World"
return 0;
}
これはgdbの出力です:
Breakpoint 1, main () at pwp.cpp:10
10 return 0;
(gdb) n
Cannot access memory at address 0x0
0x0000000100000de4 in start ()
(gdb) s
Single stepping until exit from function start,
which has no line number information.
0x0000000100000ed6 in dyld_stub_exit ()
(gdb) n
Single stepping until exit from function dyld_stub_exit,
which has no line number information.
0x0000000100000f08 in dyld_stub_printf ()
(gdb) n
Cannot find bounds of current function
(gdb) q
これを引き起こすために何が起こっているのですか?