我一直在阅读有关malloc当您请求零大小的块时的行为的讨论.
我理解malloc(0)是实现定义的行为,它应该返回一个空指针,或者我仍然不应该访问的非空指针.(这是有道理的,因为不能保证它指向任何可用的内存.)
但是,如果获得这样一个不可访问的非空指针,我是否允许以free通常的方式传递给它?或者这是非法的,因为我得到的指针malloc(0)可能不指向实际分配的内存块?
具体而言,以下代码是否具有明确定义的行为:
#include <stdio.h>
#include <stdlib.h>
int main() {
int* x = (int*) malloc(0);
if (x == NULL) {
printf("Got NULL\n");
return 0;
} else {
printf("Got nonnull %p\n", x);
}
free(x); // is calling `free` here okay?
}
Run Code Online (Sandbox Code Playgroud) 我最近尝试使用git时收到此错误.我不确定错误何时开始,因为我很少使用git.我曾经使用它.我没有改变任何关于它或我知道的机器.现在它不起作用.
我已经完成并使用此安装程序重新安装了最新版本,我仍然在终端中收到相同的错误.
有没有人听过这个?安装程序运行正常,没有错误,但它仍然无法识别终端中的"git"命令.
我正在运行OS 10.5
编辑
根据下面的响应,我指向我的PATH变量,我认为这是问题所在.我一度安装了MacPorts,这改变了我的.profile我不知道如何更改它.我原来的.profile是这样的:
alias g='git'
export PS1='$(git branch &>/dev/null; if [ $? -eq 0 ]; then \
echo "\[\033[00m\]$(git branch grep ^*sed s/\*\ //) "; fi)\$\[\033[00m\] '
export LC_CTYPE=en_US.UTF-8
export PATH=$PATH:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)
我的新.profile是这样的:
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH
Run Code Online (Sandbox Code Playgroud)
如何将这两个文件合为一个?
在Emacs的,而编辑的我自己的笔记文本文件(一个.txt文件,不是一个.tex文件),我使用的M-x set-input-method Ret TeX,为了方便地访问各种Unicode字符.因此,例如,键入\tospace会导致"→"插入到文本中,并且键入x^2会导致"x 2 "被插入,因为我使用的字体分别支持Unicode代码点0x2192和0x00B2.
该方法中的一个特殊处理字符是下划线键_.但是,我用于Emacs的字体似乎不支持各种下标字符的代码点,例如下标零(代码点0x2080),所以当我输入时_0,我得到的东西在我的输出中呈现为一个空白._0在这种情况下,我宁愿只有两个字符.
我可以得到_0由尴尬的击键序列_spacedel0,因为space在序列的中间按键导致的Emacs中止TeX的输入法.但这很尴尬.
所以,我的问题是:_当我使用TeX输入法时,如何在本地自定义我的Emacs以便不重新映射密钥?或者我如何创建一个TeX输入法的修改克隆(或扩展等),从它的魔力中省略下划线?
到目前为止我尝试过的事情:
describe-key了_; 但它self-insert-command就像许多其他文字字符一样受到限制.我确实看到了post-self-insert-hook那里,但我没有尝试过用它来破坏TeX输入法.到目前为止我没有尝试过的事情: