mallocで確保した領域に文字列を

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: mallocで確保した領域に文字列を

Re: mallocで確保した領域に文字列を

#4

by あまつ » 8年前

は〜、とても勉強になりました!ありがとうございましたm(_ _)m

Re: mallocで確保した領域に文字列を

#3

by みけCAT » 8年前

確保した領域の範囲外へのアクセス(読み書き)は未定義動作なので、何が起こってもおかしくありません。
正常に終了するかもしれないし、Segmentation Faultになるかもしれないし、鼻から悪魔が出てくるかもしれません。
ValgrindAddressSanitizerを使うと、エラーを検出できるかもしれません。
使い方の解説は、例えば
valgrindでC/C++のメモリリークを発見する - Qiita
clang の AddressSanitizer を使って、バッファオーバーフロー/ヒープオーバーフローを検出する - Qiita

Re: mallocで確保した領域に文字列を

#2

by box » 8年前

あまつ さんが書きました:このプログラムでは"あいうえお"に必要な11バイトの領域をmallocで確保しています。が、2バイトや3バイトでもERRORが発生せず、出力されます。
深刻なエラーが出るような領域をたまたま破壊していないだけです。
11バイト確保したならば、そこへ格納できるのは「プログラマーの責任で」11バイトまでです。

mallocで確保した領域に文字列を

#1

by あまつ » 8年前

このプログラムでは"あいうえお"に必要な11バイトの領域をmallocで確保しています。が、2バイトや3バイトでもERRORが発生せず、出力されます。わかる方がいましたら教えてください。お願いしますm(_ _)m

コード:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
    char *memo;

    memo = (char *)malloc(11);

   if(memo == NULL) {
    printf("メモリが確保できません\n");
    
   }else{

    strcpy(memo,"あいうえお");     //2バイト × 5 + null文字 = 11バイト

    printf("%s\n",memo);
        
}
    free(memo);
   
}

ページトップ