• 締切済み

malloc使用後のメモリアロケーションエラー(MS-C7.0)

selenityの回答

  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

私はTurboCユーザだったのでMSCの事は よくわかりませんが、 char *p; だとnearポインタになり、64kまでしか 取れなかったような気がします。 char far *p; または char huge *p; としてfarポインタかhugeポインタを 使う必要があるかもしれません。 farmalloc()、farfree()なんて関数がありませんか? 違っていたら、ごめんなさい、、、m(_ _)m

関連するQ&A

  • C言語 mallocによる消費メモリ

    char *b = (char *)malloc(sizeof(char) * 6) というC言語のプログラムで、消費されるメモリは何バイトになるのでしょうか?理由も合わせて教えていただきたいです。 32ビットのPCで行うものとしてよろしくお願いいたします。

  • WindowsXPとAUTOEXEC.BATやCO

    WindowsXPとAUTOEXEC.BATやCONFIG,SYS  何時も回答いただきありがとうございます。  WindowsXPでは、  MS-DOSモードやMS-DOSプロンプト 16ビットプログラム  など、無いのに、なぜ、 ルートディレクトリーに  AUTOEXEC.BATやCONFIG,SYS が、あるのでしょうか?   AUTOEXEC.BATやCONFIG,SYS は、16ビットプログラム専用に使用するものでは、無いのでしょうか?   AUTOEXEC.BATやCONFIG,SYS のファイルの中身は、何も書かれていません。  たとえ、ひとつだけでも、お知りのことがありましたら、教授方よろしくお願いします。  敬具

  • 英語版MS-DOS6でのSwitch

    以前、英語MS-DOS6.2でswitchができないかと質問させていただきました。 HSBというフリーウェアとconfig.sys/autoexec.batのcopy等等の組み合わせで バッチファイルを組めばいいとの回答をいただいたのですが.... copy -y c:\back\config.sys c:\config.sys copy -y c:\back\autoexec.bat c:\autoexec.bat c:\back\hsb\hsb.exe というようなバッチを組むと、3行目を実行してくれません。  いろいろ試したのですが、config.sysとautoexec.bat のコピーは正常に終了しているのですが、 それ以降を実行してくれないようです。  単に copy -y c:\back\config.sys c:\config.sys copy -y c:\back\autoexec.bat c:\autoexec.bat ren c:\test.txt c:\test2.txt ってやっても3行目は実施してくれません。 config.sysやautoexec.batのコピーってなにか特別な扱いになってるのでしょうか??

  • new と malloc によるメモリの動的確保について

    初めて投稿させて頂きます。よろしくお願い致します。 現在、以下のような、2次元配列による動的なメモリの確保を意図して、コードをC/C++にて記述しています。 (コンパイラはMINGW32のg++ 3.4.5) //mallocによるメモリ動的確保 data = (char **)malloc(num * sizeof(char*)); for(i=0; i<rowNum; i++){ data[i] = (char *)malloc(sizeof(char)*256); } //newによるメモリ動的確保 data = new char*[rowNum]; for(i=0; i<rowNum; i++){ data[i] = new char; } C++で書くのならば、 「mallocによるメモリ確保は辞め、newによるメモリ確保をしなさい」 という指摘が、書籍でもwebでもありましたので、 両方書き、両者を比べているのですが、理由がイマイチ分かりません。 10万行ほどのテキストデータで実験させてみたのですが、 mallocによる記述の方が、動作が数秒速いようなのです。 それで、new やmalloc で実際何をやっているのか、コードを見ようと思ったのですが、 newでは、 void* operator new(std::size_t) throw (std::bad_alloc); void* operator new[](std::size_t) throw (std::bad_alloc); void* operator new(std::size_t, const std::nothrow_t&) throw(); void* operator new[](std::size_t, const std::nothrow_t&) throw(); inline void* operator new(std::size_t, void* __p) throw() { return __p; } inline void* operator new[](std::size_t, void* __p) throw() { return __p; } というnewファイルの記述で行き詰まり、 malloc は malloc_allocator.hというファイルで行き詰りました。 以上を踏まえて、 1)そもそも、上記のメモリ動的確保記述はスマートな書き方なのか 2)実際に、newやmallocは、どういった手法でメモリ領域を確保しているのか 以上の2点について、ご教授下さい。よろしくお願い致します。

  • Windows PE >> 最初に起動させるには

    ms-dos 時代の autoexec.bat config.sys はないのですね。 windows PE を起動するなり、最初に実行(起動)させるには、 どこのディレクトリに、どういう名前のファイルを置けばいいのでしょうか?

  • malloc関数によるメモリの確保

    C初心者です。 malloc関数によるメモリの確保に関して教えてください。 2次元配列のサイズに対してmalloc関数の引数値をたとえば、 (double*)malloc(datasize*sizeof(double)) などとしメモリ領域を確保すると、メモリアドレスはデータのサイズ によらず一定 1234044、1234048となります。 データサイズを大きくし、datasize*sizeof(double)が16Kバイトを超えるとcmd.exeがエラーとなり落ちます。 デバックモードで実行すると 「"System.AccessViolationException"のハンドルされていない例外が不明なモジュールです。で発生しました。 追加情報:保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリがこわれていることが考えられます」 というメッセージがでます。 コンパイラはExpressEdition2008です。 この現象を回避するにはどうすべきか、なぜこのようなことが起こるのかご教授ください。 よろしくお願いいたします。

  • MS-DOS6.22(英語版)でdefragできない

    MS-DOS6.22というバージョンでdefragができません。 具体的には、「コンベンショナルメモリが足りない」といったメッセージで 実行できていません。 defragを行うために、それ専用のconfig.sys と autoexec.bat を作成して 出来る限りシェイプアップしました。 memで見てみるとフリーな領域を594kbyteまでは確保できているのですが... コンベンショナルメモリのフリー確保では解決できないのでしょうか?

  • c言語のメモリリークについての質問

    c言語のメモリリークについての質問 c言語初心者のため、メモリリークについて質問させていただければと存じます。 下記のコードで、 char* char_p = "char1"; char_p = "char2"; // ←メモリリーク? 2行目の部分は、 "char1"のメモリ領域が確保されたままで、解放できなくなってしまうので、 メモリリークを起こして問題な気がするのですが、実際はどうなのでしょうか? よろしくお願いいたします。

  • C言語 動的なメモリの確保 実行できない

    malloc関数を使いメモリを確保しそこへ"ABCD"と記憶させ、ポインタ*Cを使い確保したメモリの内容を表示するプログラムです。 ********************************************* #include <stdio.h> #include <stdlib.h> int main(void) {   int i;   char *C;   C = (char *) malloc (sizeof(char) * 5);   C = "ABCD";   for(i = 0; i < 5; i++){     if(C[i] != NULL){       printf("%s", C[i]);    ←※エラー※     }   }   free(C);   return 0; } ********************************************* 正常にコンパイルできますが実行エラーになります。VCを使いF10のデバッグテストで※のところエラーになります。なぜなのでしょうか?

  • NEC MS-DOS 6.2 MOの認識

    MMO-230VというMOドライブを使っています。 NEC MS-DOS ver. 6.2 のMO用のドライバを探しているのですが、ありますでしょうか? 認識のさせ方で、autoexec.bat と config.sys の記述の仕方と、Dos用のデバイスドライバを探しています。 宜しくお願いします。