C統合・質問スレッド ..
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
654:デフォルトの名無しさん 07/02/16 00:24:48 > void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); } arrayはarray2のコピーであり、それを書き換えたところでarray2にmallocの戻り値は代入されない。 したがって未初期化のarray2をbに渡し、それをfreeしようとしてお亡くなりになる。 やるならvoid a(int** array, int size) { *array = (int*)malloc(sizeof(int)*size); } 655:デフォルトの名無しさん 07/02/16 00:40:54 >>653 関数a()に渡したarray2は、array2自体が何ら設定されていないのだがあんたの使うコンパイラは警告してくれないのか? オプションで警告レベルを調整できるのなら引き上げておくことを進めておく。 で、件の目的なら>654でもいいがint * a(int size) {return malloc(sizeof(int) * size);}でもいいね。 656:デフォルトの名無しさん 07/02/16 01:07:52 #include <stdio.h> void f(int i) {i = 42;} void g(int* p) {*p = 42;} int main(void) { int x = 7; f(x); printf("%d\n", x); g(&x); printf("%d\n", x); return 0; } 上と同じ理屈。短絡的に言えば引数経由で値を返したいときには*の数を1個増やすということになる。 #include<stdio.h> #include<stdlib.h> void MyAlloc(int**, int); void MyFree(int*, int); int main(void) { int size = 10; int* array2; MyAlloc(&array2, size); MyFree(array2, size); return 0; } void MyAlloc(int** array, int size) {*array = (int*)malloc(sizeof(int) * size);} void MyFree(int* array, int size) {free(array);}
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5392日前に更新/239 KB
担当:undef