- ベストアンサー
allocってなんですか?
a-kumaの回答
- a-kuma
- ベストアンサー率50% (1122/2211)
> よく変数の寿命とか分からないので、 > みんなグローバルにしていたら、COBOLかよと > よく言われている私には苦手なトコです。 そんな、難しくないですよ。 自動変数の寿命は、変数を宣言しているところを直前で括っている中括弧の中に いる間、が、その変数の寿命です。 int xxx() { int i; for (i = 0 ; i < 10 ; ++i) { int j; ... { int k; ... } … kは、ここまで } … jは、ここまで return 0; } … iは、ここまで > みんなグローバルにしていたら、COBOLかよと 「って、COBOL やったことあるのかよ」と突っ込みを入れたくなりますよね。 今時は、COBOL を経験すること自体「まれ」ですもんね。 # といいつつも、COBOL のソースを読むはめになりそうなんですが (^^;
関連するQ&A
- int型の文字列について
文字列を扱う場合はchar型をつかいますが、int型がchar型より大きいメモリ領域を確保しているとすると、int型で文字列を扱っても問題はないのではと思いました。 実際にやってみると、処理系によって問題なく作動するものとそうでないものが有りますが、基本的な考え方として文字列をint型で扱うことは問題があるのでしょうか? ご存知の方よろしくお願いいたします。 <補足> 要は、255以下の数字を扱うときに、char型でないといけないという制約はなく当然int型を使えるように、文字列においてint型を使うことは、基本的な考え方として問題なのかをお聞きしたい。 当然、処理系において、ルール的に禁じている場合は使えないということは理解できますが。
- ベストアンサー
- C・C++・C#
- C言語におけるローカル変数が使用するメモリについて
例のようなC言語のプログラムを動かした場合、 確保されるメモリ領域はどうなるのでしょうか。 例 #include <stdio.h> int main(void) { int a = 0; } このとき、変数aはint型なのでスタック領域に4バイトのメモリが確保されると理解しています。 と同時にaという変数名と確保されたスタック領域の番地を紐づけるようなメモリがどこかに確保されるのではないかと思ってるのですが、この理解で正しいでしょうか。 またその場合は変数aの番地はどの領域に確保されるのでしょうか。 ご教示お願いいたします。
- ベストアンサー
- C・C++・C#
- 動的メモリ確保の外部関数
画像処理関係のプログラムを作成しているのですが(C言語で)、動的にメモリ確保をすることが頻繁にあります。 そこで、どんな型(int,char,double,etc..)の場合でもメモリ確保できるような、1つの外部関数を作成したいと考えています。 例えば、 int Memory(引数) { 型宣言; int型の動的メモリ確保; char型の動的メモリ確保; double型の動的メモリ確保; return 0; } イメージでは、上のような感じです。 もしかして、このような考えは、不可能でしょうか? どなたか良いアドバイスがあれば、ご教授ください。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- intやshortやcharの変数確保時間
for文などでよく一時変数に for ( int i=0; ・・・ とか for ( short s=0; ・・・ とか for ( char i=0; ・・・ みたいに整数型の変数が使われます。 確か変数の表せる範囲は long>int>short>char だったと思うのですが、変数を確保する時間やメモリサイズに違いはあるのでしょうか? たとえばlong型変数を10万個確保する時間とintとかshortとかcharのそれ とは違いがあるのかなぁと疑問に思いました。
- ベストアンサー
- C・C++・C#
- アセンブラでのメモリの動的確保について
自作コンパイラのために最近NASMを使ってアセンブラの勉強を始めたものです。 メモリ領域の確保のためにNASMでは buffer: resb 64 と宣言しますが、C++でのchar* buffer=new char[size]; のような、動的なメモリ領域の確保の記述は可能でしょうか? 普段はC++を主に使っているため、見当違いな質問かもしれませんが、よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- char (*data)[10] のようなポインタの使い方教えてください
char (*data)[10]; のようのポインタの使い方がよくわからないので, 詳しい方いたら,教えてください. void main (){ char (*data)[10]; data = ????;//newを使ってメモリを確保したい for (int i = 0; i < ????; i++){ for (int j = 0; j < 10; j++){ data[i][j] = 何かデータ; } } //最終的にはこんな風に使いたいと思っています. } このような感じで new を使ってメモリの領域を確保したいのですが, どうもうまくいきません. data = new char[3]; data = new char*[3]; など,いろいろ試したのですが,だめでした. 使用しているOSはwindowsXPでvisual studio 2005を使ってプログラムをコンパイルしています. わかる方いたら,よろしくお願いします.
- ベストアンサー
- C・C++・C#
- mySQLのカラムの並び順によるデータ領域確保について
mySQLのカラムの並び順によるデータ領域確保について http://d.hatena.ne.jp/yarb/20090519/p2 のような4バイト単位で領域を確保するのでしょうか? 同じテーブルでも並び順は、4バイト単位を意識して、 パターン1で作成した方が効率は良いのでしょうか? ■パターン1 tinyint(1) tinyint(1) tinyint(1) char(1) int int int ■パターン2 tinyint(1) int tinyint(1) int char(1) int tinyint(1)
- ベストアンサー
- MySQL
- 多次元配列のメモリ解放
多次元配列のメモリ解放についてです。 以下のような方法で多次元配列を確保した場合に、 --- char** ppMain; ppMain = new char*[3]; for (int i = 0; i < 3; i++){ ppMain[i] = new char[20]; } --- メモリ解放する場合、 --- for (int i = 0; i < 3; i++){ delete [] ppMain[i]; ppMain[i] = NULL; } delete [] ppMain; ppMain = NULL; --- で良いでしょうか? おそらく、new/deleteの回数が同じであれば問題ないと思うのですが。 少し混乱してしまって、 delete [] ppMain[i]; によって new char*[3]で確保したところも解放されており delete [] ppMain; が必要なく危険な領域まで解放しようとしているということはないでしょうか? ご専門、お詳しいかたコメント宜しくお願いします。
- 締切済み
- C・C++・C#
- 動的なメモリ領域の確保
double型変数5個分のメモリをmalloc関数により確保し,その確保した要素のアドレスを表示するように,プログラムを作る問題で、 (注)に「 %pで表示するためには,double型へのポインタ(double *)をvoid型へのポインタ(void *)にキャストする必要がある.」と書かれていたのですが、どういうことでしょうか? 以下のようでいいのでしょうか? #include<stdio.h> #include<stdlib.h> #define COUNT 5 // 動的に確保するメモリ領域数を示すマクロ定数の定義 int main(void) { // 動的に確保するメモリ領域のアドレスを保持するポインタ変数の宣言 double * pointer; int i; // for文で使用する変数の宣言 // int型変数5個分のメモリ領域を確保 pointer = (double *)malloc(sizeof(double) * COUNT); if(pointer == NULL) { // メモリ領域の確保が失敗した場合 printf("メモリ領域を確保できませんでした.\n"); exit(1); // プログラムの終了 } for(i = 0; i < COUNT; i++) printf("%d番目のアドレスは%pです.\n", i + 1, pointer + i); free(pointer); // 確保したメモリ領域の解放 return 0; }
- 締切済み
- 情報工学
お礼
COBOLは二種情報処理技術者試験のときに 簡単だからと言う理由で やらされました。 wark area、変数などを前もって定義しておくので Cで言うとグローバルの考えしか出来ていないってことです。 だから、いっつもグローバルで定義しちゃうので、 スコープなんて・・・です。 でも、分かりやすかったです。 ありがとうございました。