未定义的行为? [英] Undefined behavior?

查看:91
本文介绍了未定义的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

***发布免费通过你的新闻阅读器post.newsfeed.com ***


大家好,


有人带来这是我在Yahoo!上读到的一个小组


char * p,* q;

p = malloc(16);

如果(p){

q = p;

p = NULL;

free(q);

}


这会调用UB吗?


Andrew

----- =通过Newsfeed.Com发布,未经审查的Usenet新闻= -----
http://www.newsfeed.com - 世界排名第一的新闻组服务!

----- == 100,000个团体! - 19台服务器! - 无限下载! = -----

解决方案

Andrew Clark< an ***** @ syr.edu>写道:

char * p,* q;
p = malloc(16);
if(p){
q = p;
p = NULL;
免费(q);
}
这会调用UB吗?




没有。没有理由这样做。

-

int main(void){char p [] =" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv wxyz.\

\ n",* q =" kl BIcNBFr.NKEzjwCIxNJC" ;; int i = sizeof p / 2; char * strchr(); int putchar(\

); while (* q){i + = strchr(p,* q ++) - p; if(i> =(int)sizeof p)i- = sizeof p-1; putchar(p [i] \

);}返回0;}


Andrew Clark写道:


***通过您的新闻阅读器免费发布post.newsfeed.com ***

大家好,

有人在雅虎读过的小组中提到了这个问题

char * p ,* q;
p = malloc(16);
if(p){
q = p;
p = NULL;
free(q);
这个会调用UB吗?




No.

malloc返回的指针值,

是被释放的指针值。


-

pete


安德鲁·克拉克写道:

***在post.newsfeed.com上通过你的新闻阅读器免费发送***

大家好,

有人把这个提到了我在雅虎上读过的一个小组。

char * p,* q;
p = malloc(16);
if(p){
q = p;
p = NULL;
免费(q);
}
这会调用UB吗?




是的,但仅仅是因为你未能:


#include< stdlib.h>


(或者,至少我们看不到它( - :)


除此之外,一切都很好。


HTH,

- g

-

Artie Gold - 德克萨斯州奥斯汀

哦,过去的美好时光普通老垃圾邮件。


*** post for FREE via your newsreader at post.newsfeed.com ***

Hi all,

Someone brought this up in a group I read on Yahoo!

char *p, *q;
p = malloc ( 16 );
if ( p ) {
q = p;
p = NULL;
free ( q );
}

Will this invoke UB?

Andrew
-----= Posted via Newsfeed.Com, Uncensored Usenet News =-----
http://www.newsfeed.com - The #1 Newsgroup Service in the World!
-----== 100,000 Groups! - 19 Servers! - Unlimited Download! =-----

解决方案

Andrew Clark <an*****@syr.edu> writes:

char *p, *q;
p = malloc ( 16 );
if ( p ) {
q = p;
p = NULL;
free ( q );
}

Will this invoke UB?



No. There is no reason that it should.
--
int main(void){char p[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv wxyz.\
\n",*q="kl BIcNBFr.NKEzjwCIxNJC";int i=sizeof p/2;char *strchr();int putchar(\
);while(*q){i+=strchr(p,*q++)-p;if(i>=(int)sizeof p)i-=sizeof p-1;putchar(p[i]\
);}return 0;}


Andrew Clark wrote:


*** post for FREE via your newsreader at post.newsfeed.com ***

Hi all,

Someone brought this up in a group I read on Yahoo!

char *p, *q;
p = malloc ( 16 );
if ( p ) {
q = p;
p = NULL;
free ( q );
}

Will this invoke UB?



No.
The pointer value returned by malloc,
is the pointer value which is freed.

--
pete


Andrew Clark wrote:

*** post for FREE via your newsreader at post.newsfeed.com ***

Hi all,

Someone brought this up in a group I read on Yahoo!

char *p, *q;
p = malloc ( 16 );
if ( p ) {
q = p;
p = NULL;
free ( q );
}

Will this invoke UB?



Well yes, but only because of your failure to:

#include <stdlib.h>

(or, at least we can''t see it (-: )

Other than that, all is well.

HTH,
--ag
--
Artie Gold -- Austin, Texas
Oh, for the good old days of regular old SPAM.


这篇关于未定义的行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆