0

セグメンテーション違反の理由を観察しているだけです。私はここでメモリを割り当てましたが、それでもセグメント障害が発生しています。これにはどのような理由が考えられますか?

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

void main()
{
    int **matrix,i,j;
    matrix = malloc(sizeof(int));
    **matrix = 10;
    printf("%d", **matrix);

}
4

3 に答える 3

2

matrixはポインター (たまたま へのポインターへのポインターint) であり、それが指すためのメモリを (おそらく十分ではありませんが) 割り当てました。

*matrixもポインタです (たまたま へのポインタintです)。また、それが指すメモリを割り当てていない*matrixため、ガベージが含まれています (または、malloc()呼び出しで十分なメモリが割り当てられなかった場合は存在しません)。

したがって、逆参照*matrixには未定義の動作があります。あなたは幸運にも症状が明らかでした。

指すsizeof(int)ためにバイトを割り当てているのはなぜですか?matrix

そして、なぜあなたvoid main()は正しいではなく定義しているのint main(void)ですか? (void main()ほとんどの場合、その言語をよく知らない著者が書いた本やチュートリアルを検出する方法として役立ちます。)

于 2013-03-21T00:45:41.167 に答える
0
sizeof(int)

int、whilist のサイズを格納します

sizeof(*int)

size を int へのポインタに格納します。intのサイズではなく のサイズを予約してい*intます。これが問題の原因です。

また、実際の計算も行いたい場合は、int を *int ポインターに割り当てる必要があります。

于 2013-03-21T00:44:50.577 に答える