Выделять меньше места, чем необходимо для определенного типа?

Я относительно новичок в программировании на C и у меня проблемы время, чтобы понять всю проблему выделения памяти.

Скажем так:

int *n = malloc(sizeof(char));
// (assuming malloc doesn't return NULL of course)

Это дает указатель на int, но я не выделил достаточно памяти для int. Почему тогда это работает? Я мог бы даже привести его в int явно, и это не побеспокоит gcc. Я знаю, что компиляторы C очень минималистичны, но даже если я присвою значение * n, которое не помещается в char, например:

*n = 300;

... и распечатайте его потом:

printf("%d", *n);

... он работает отлично, хотя сейчас, самое позднее, я ожидал бы какой-нибудь ошибки вроде ошибки сегментации.

Я имею в виду, что sizeof (char) равно 1, а sizeof (int) равно 4. На моей машине 4 байта. Следовательно, 3 байта записываются в какое-то место в памяти, которое не было выделено должным образом.

Это работает только потому, что не выходит из стека?

Может ли кто-нибудь указать мне место где я могу найти просвет по этому поводу?

-12 1 --- 1812837-

Неявное намерение удалить приложение? Я пытаюсь заставить onclicklistener вызвать намерение удалить приложение, имея намерение вызвать действие по умолчанию «удалить приложение» из настроек приложения. Я обнаружил здесь , что могу ...

Я пытаюсь вызвать onclicklistener намерение удалить приложение, заставив намерение вызвать действие по умолчанию «удалить приложение» из настроек приложения. Я нашел здесь , что я могу удалить приложение с помощью ACTION_UNINSTALL_PACKAGE, com.packageXYXY, что, похоже, именно то, что я ищу. Однако я не знаю, как называть это. Я пробовал следующее:

public void onClick(DialogInterface dialog, int which) {
                Uri packageURI = Uri.parse("package:com.packageName");
                Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
                startActivity(uninstallIntent);

, но синтаксис неправильный. Пробовал несколько разных способов назвать это, и я как бы застрял. Не знаю, как это назвать. Спасибо за вашу помощь.

23
задан benbeel 23 October 2011 в 19:09
поделиться