小编SGM*_*GM1的帖子

我可以检查指针是否由malloc/calloc/realloc分配?

我想知道是否可以检查传递给函数的指针是否由malloc/calloc/realloc分配?

int main(){
    struct something o;
    struct something *a;
    a = malloc(sizeof(struct something));
    freeSome(&o);/*This would normally throw an (corruption?) error*/
    freeSome(a);/*This is fine*/
}

void freeSome(struct something * t){
    if (/*expression here*/){
        free(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白,通常你会检查是否t == NULL,但我只是想知道是否有可能看到是否已为给定指针分配内存.

c memory-management

13
推荐指数
2
解决办法
1万
查看次数

错误既不是语法也不是语义?

我在家庭作业上有这个问题(不用担心,已经完成):

[使用您最喜欢的命令式语言,给出每个...的示例]编译器既无法捕获也无法轻松生成要捕获的代码的错误(这应该违反语言定义,而不仅仅是程序错误)

来自"编程语言语用学"(第3版)Michael L. Scott

我的回答,称mainmain通过传递相同的参数(在C和Java),灵感来自.但我个人觉得这只是一个语义错误.

对我来说,这个问题是在询问如何产生一个既不是语法也不是语义的错误,坦率地说,我无法想到它不会陷入其中的情况.

是否容易被利用的代码,如缓冲区溢出(以及我从未听说过的其他利用)?某种坑从语言结构中掉落(IDK,但懒惰的评估/弱类型检查)?我想在Java/C++/C中使用一个简单的例子,但欢迎其他例子.

c c++ java syntax semantics

11
推荐指数
2
解决办法
1743
查看次数

C指针算术效率

我已经看到了指针算法的解释(例如指针算术).但我想知道是否存在真正的区别:
鉴于:

int* arr = (int*) malloc(sizeof(int) * 3);
Run Code Online (Sandbox Code Playgroud)

请问:

&(arr[1])
Run Code Online (Sandbox Code Playgroud)

和:

arr + 1
Run Code Online (Sandbox Code Playgroud)

除了语法之外,在任何方面都有所不同.技术上要么更高效吗?是否有某些上下文在第一个上面使用指针成瘾?我在没有循环或条件的情况下看到了从打印1到1000的一个示例.提前致谢.

c performance pointers

4
推荐指数
1
解决办法
460
查看次数

标签 统计

c ×3

c++ ×1

java ×1

memory-management ×1

performance ×1

pointers ×1

semantics ×1

syntax ×1