[解決済み] マップされた領域に対する不正なアクセス権 [重複].
2022-02-18 10:45:56
質問
以下の関数を実行しようとすると、エラーが発生します。
char* reverseInPlace(char* src)
{
//no need to alloc or free memory
int i=0;
int size=mystrlen(src);
for(i=0;i<size;i++)
{
int j=size-i-1;
if(i<j)
{
char temp;
printf("Interchange start %d:%c with %d:%c",i,src[i],j,src[j]);
temp=src[i];
src[i]=src[j];//error occurs here
src[j]=temp;
printf("Interchange complete %d:%c and %d:%c",i,src[i],j,src[j]);
}
}
return src;
}
このコードをこう呼んでいます。
char* rev2=reverseInPlace("BeforeSunrise");
printf("The reversed string is %s\n",rev2);
エラーの内容はこのようなものです。
Interchange start 0:B with 12:e
Process terminating with default action of signal 11 (SIGSEGV)
Bad permissions for mapped region at address 0x401165
なぜこのようなエラーが発生するのでしょうか?
解決方法は?
関数に定数文字列を渡している。
文字列リテラルの型は
char [N + 1]
(ここで
N
は配列の長さ)を変更すると、未定義の動作になります。コンパイラーはその時点ですでに警告を発しているはずです。
もし修正したいのであれば、コピーを作成する必要があります。
char str[] = "BeforeSunrise";
char* rev2=reverseInPlace(str);
関連
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC