こんにちは私はこの状況に走りました。私は10個のポインタの配列を私に与えるためにmallocを使用しています。 gdbでテストポインタを見ると、そのうちの1つ(3番目)が0x0を指しています。場合によっては、apple [2] - > string = "hello"を使用すると、コードがsegfaultになることがあります。なぜmallocはこれをしますか?助けを前にありがとう。nullポインタを初期化するMalloc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(void)
{
typedef struct test
{
char *string;
int data;
} test;
test *apple[10]; // Declare an array of 10 test pointers. This line results in one of the pointers having a null value.
apple[0] = malloc(sizeof(test));
apple[0]->string = "hello";
printf("The string is %s\n",apple[0]->string);
printf("Size of apple[0]->data is %d\n",sizeof(apple[0]->data));
printf("Size of tester is %d\n",sizeof(test));
free(apple[0]);
return 0;
}
ポインタの配列がどのように機能するかを見たいと思っていました。私はすべての10のポインタを使用するつもりはなかった。私は必要なものだけをmallocする必要がありますか? 3番目のポインタが0x0だったのは偶然でしょうか?
はい、初期化されていない:あなたは
apple[0]
、またはのmalloc()配列全体で行ったように(今は本当に必要ではないポインタで、)アプローチ、あなたは()(malloc関数を独自にすべての要素を持っていますメモリは任意の値を保持できます。必要なのは 'malloc()'だけですが、モールの内容を知る方法が必要です例えば、 'test * apple [10] = {0};'のように、すべてのunmallocの要素を 'NULL 'に設定します。 – hmjd