char配列を使用するLinux VMでCプログラムを作成しようとしています。私は配列に何かをしようとするたびに、私はそれが見つかりました。 sizeof()
、セグメンテーション違反が発生しました。私はちょうど配列を作ってテストとしてsizeof()
を得たテストプログラムを書いたが、確かに私は同じエラーを得る。 これはVMで動作するプログラムに関連していると思います。ここにコードです:Cali Linux VM内のセグメンテーションフォールト
#include <stdio.h>
#include <stdlib.h>
#define ARR_LENGTH(x) sizeof(x)/sizeof(x[0])
int main()
{
printf("Hllo world!\n");
int sent = 10;
char hello[] = {'a','b','c','d','e','f','g','h'};
printf(sizeof(hello));
printf(ARR_LENGTH(hello));
return 0;
}
私は何かが不足している、またはVMは問題がありますか?
'printf(sizeof(hello));'は数字の印字方法ではありません。 'printf'はその数値を' char * 'として使用します。これは、おそらくセグメンテーション違反の原因になります。私はあなたのコンパイラがあなたにそれについて警告していないことに驚いています。 – Biffen
...いいえ、これはVMで動作することとは関係ありません。 (あなたがその結論にどのように到達したかについてはかなり興味があります。) – Biffen
標準機能を使用する前に、またはOSを疑うように、マニュアルページを読むことをお勧めします。そして、VMはアプリケーションコードにまったく影響を与えません。それを使って基本的な考え方です。 – Olaf