我最近了解到,取消引用未与某个对象 ( ) 对齐的指针uint32_t* foo = (uint32_t*)7; *foo = 5;实际上是未定义的行为:
C11 第 6.2.8 节:对象对齐:
完整的对象类型具有对齐要求,这对可以分配该类型的对象的地址施加了限制。对齐是实现定义的整数值,表示可以分配给定对象的连续地址之间的字节数。对象类型对该类型的每个对象施加对齐要求:可以使用
_Alignas关键字请求更严格的对齐。
好的,非常有趣。但malloc似乎根本不关心对齐:
7.22.3.4
malloc函数概要
#include <stdlib.h>
void *malloc(size_t size);
描述该
malloc函数为大小由 size 指定且值不确定的对象分配空间。
退货该
malloc函数返回空指针或指向已分配空间的指针。
因此:执行以下操作是否不太可能会引发未定义的行为?
uint32_t* a = malloc(10*sizeof(uint32_t));
*a = 7;
Run Code Online (Sandbox Code Playgroud)
毕竟,我们无法保证 的返回值与malloc任何内容对齐。
如果您访问我的网站:www.ryancoughlin.com - 如果您在页面右侧看到Google,Yahoo等RSS按钮.我试图让它们均匀对齐,它们都是相同的图像高度,我一直试图让它们均匀排列.但我没有成功.
前几天这段代码正在运行.我改变了一些东西并重新运行它,现在它没有按预期工作.显然我改变的行为改变了行为,但我已经回去并恢复了所有这些改变,但它仍然无效.忽略那一点信息(开始),为什么这段代码不会在JPanel中放置一个15x15的JLabel网格?
gameBoard.setLayout(new FlowLayout());
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
JLabel tile = new JLabel("");
tile.setHorizontalAlignment(SwingConstants.CENTER);
tile.setPreferredSize(new Dimension(27, 27));
tile.setBorder(new EtchedBorder());
tile.setEnabled(false);
gameBoard.add(tile);
}
}
Run Code Online (Sandbox Code Playgroud)
gameBoard是通过NetBeans的GUI Builder定义的JPanel.它具有优选的尺寸,最大尺寸(与优选相同).水平/垂直可调整大小的选项被禁用,但是当此代码运行时,每个按钮水平延伸一行而不会断开.
如果我理解正确,FlowLayout应该在元素到达其包含元素的末尾时将其包装起来.这发生在今天之前,我真的不知道为什么这种行为停止了?
我想在C和C++中将任何类型的指针转换为int.C和C++的代码必须相同.以下程序适用于C但不适用于C++.
int main(void)
{
long long a;
int b = (int)&a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它适用于C++?
我想通过使用将我的欢迎说明向右对齐,<p align="right">
但它似乎不起作用..是因为 Session/PHP 不能与 p 对齐吗?
<?php
session_start();
if($_SESSION['SESS_admin'] == 0)
require("do_menu.php");
else
require("do_menu3.php");
require("auth.php");
require("do_html_header.php");
do_html_header();
print"<p align=\"RIGHT\"><h1>Welcome ". $_SESSION['SESS_FIRST_NAME']."!</h1></p>";
do_menu();
?>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
嗨,
我创建了一个弹出窗口,该弹出窗口最右边有一个关闭按钮.我尝试通过放置以下对齐图像:
position:absolute;
right:0px;
top:0px;
Run Code Online (Sandbox Code Playgroud)
但它没有正确对齐..可以任何一个帮助.!!!!
这是我的代码..
<!DOCTYPE>
<html>
<head>
<title> New Document </title>
<style>
div.irmGraphPopup{
border:10px solid black;
width:1000px;
height:500px;
position:absolute;
}
div.irmGraphPopup span:{
position:absolute;
right:0px;
top:0px;
}
</style>
</head>
<body>
<div class="irmGraphPopup">
<span> <img src="round_black_close2.png" alt="Close"/></span>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 在 Rust 中,将 a 转换*const u8为 a*const T是可以的,但取消引用强制转换指针是不安全的,因为指向的内存可能不满足T大小、对齐和有效字节模式的要求。我试图提出一个违反对齐要求的示例,但满足其他两个要求。
因此,我生成一个 7 的随机切片u8,并尝试将不同的长度为 4 的子切片解释为 f32 值。任何字节模式都是有效的 f32 ,而 4 u8 是无效的size_of::<f32>()。因此,唯一变化的是子切片指针的对齐方式,该指针从基本切片偏移:
slice: [ 0 | 1 | 2 | 3 | 4 | 5 | 6 ]
sub-slices: [ 0 1 2 3 ]
[ 1 2 3 4 ]
[ 2 3 4 5 ]
[ 3 4 5 6 ]
Run Code Online (Sandbox Code Playgroud)
这是我运行的代码
use std::mem::transmute;
use std::ptr::read;
use std::convert::TryInto;
//use rand::Rng; …Run Code Online (Sandbox Code Playgroud) 我有一个固定宽度的960px容器,我正在调整我的设计,以适应各种屏幕分辨率.在容器中,我有一些DIV使用宽度%和最小宽度的浮动,如:
width:80%;
min-width:200px;
Run Code Online (Sandbox Code Playgroud)
这里的问题是DIVs不是水平排列的; 他们最终落在彼此之下.以前,我DIV的设定宽度(我现在更改为最小宽度).
我目前如何形成DIV的一个例子:
容器:
width: 830px;
float: left;
Run Code Online (Sandbox Code Playgroud)
1 - 科拉姆:
width:100%;
min-width: 200px;
float: left;
Run Code Online (Sandbox Code Playgroud)
第二,科拉姆:
width:100%;
min-width: 200px;
float: left;
Run Code Online (Sandbox Code Playgroud)
第三,科拉姆:
width:100%;
min-width: 200px;
float: left;
Run Code Online (Sandbox Code Playgroud)
等等
在此示例中,1st-colum DIV覆盖容器的整个宽度并向下推动其他DIV.
下面的HTML示例:
<div id="container">
<div id="1stcolum">Hello world</div>
<div id="2ndcolum">Hello world</div>
<div id="3rdcolum">Hello world</div>
</div>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,HTML中也没有任何花哨的东西.