avatar
A question about c++ pointer# Programming - 葵花宝典
d*n
1
see this
void foo()
{
char *str="whatever";
/*
define function here
*/
return;
}
After foo() returns, will memeory used to store *str be free? (provied that
no delete[] str is used)
avatar
s*u
2
static的

that

【在 d*******n 的大作中提到】
: see this
: void foo()
: {
: char *str="whatever";
: /*
: define function here
: */
: return;
: }
: After foo() returns, will memeory used to store *str be free? (provied that

avatar
a*l
3
actually you can not use "delete[] str".....

that

【在 d*******n 的大作中提到】
: see this
: void foo()
: {
: char *str="whatever";
: /*
: define function here
: */
: return;
: }
: After foo() returns, will memeory used to store *str be free? (provied that

avatar
e*n
4
as long as you didn't use "new" to dynamically allocate memory, you will be
fine.
by defauly, the memory is locally allocated in the stack, not in the heap
{
char *str = "12345";
} // you will be fine, no memory leak
and
{
char *str1 = new char[6];
....
delete [] str1; // must
} // you will be fine only if you have the delete [] statement
is different.
avatar
k*f
5
char*str="12345"; "12345"字符串不是在stack里面的,不能修改的。
char str[]="12345";这个才是在stack里面的。可以随便修改的。比如str[0]='6';

be

【在 e***n 的大作中提到】
: as long as you didn't use "new" to dynamically allocate memory, you will be
: fine.
: by defauly, the memory is locally allocated in the stack, not in the heap
: {
: char *str = "12345";
: } // you will be fine, no memory leak
: and
: {
: char *str1 = new char[6];
: ....

avatar
j*y
6
真及时,本来我也有这个疑问的。
char* str="12345"; "12345"字符串不是在stack里面的,不能修改的。
那"12345"是存在哪里的?我觉得是静态内存里,不知道对不对。
如果函数foo的返回类型是char*, 那函数结尾return str;应该可以合法返回"12345"
罗?
avatar
D*s
7
usually it's in code space.

【在 j******y 的大作中提到】
: 真及时,本来我也有这个疑问的。
: char* str="12345"; "12345"字符串不是在stack里面的,不能修改的。
: 那"12345"是存在哪里的?我觉得是静态内存里,不知道对不对。
: 如果函数foo的返回类型是char*, 那函数结尾return str;应该可以合法返回"12345"
: 罗?

avatar
c*h
8
程序本身的数据段里 (程序有代码段、数据段、堆栈段等segment,可以去查阅汇编语
言的书籍)

【在 j******y 的大作中提到】
: 真及时,本来我也有这个疑问的。
: char* str="12345"; "12345"字符串不是在stack里面的,不能修改的。
: 那"12345"是存在哪里的?我觉得是静态内存里,不知道对不对。
: 如果函数foo的返回类型是char*, 那函数结尾return str;应该可以合法返回"12345"
: 罗?

avatar
j*e
9
When a program is loaded into memory at run time, it normally consists of
six sections:
Description | Minimum Required Access | Non-Volatile? | Run Time
Behavior
____________________________________________________________________________
__
Code |Execute-Only |Yes |Fixed/Static
Constants |Read-Only |Yes |Fixed/Static
Initialized Data |Read/Write |Yes |Fixed/Static
Uninitialized Data |Read/Write |No |Fixed/S
avatar
t*t
10
你左右不分的?
/和\好象差别挺大的……

__

【在 j********e 的大作中提到】
: When a program is loaded into memory at run time, it normally consists of
: six sections:
: Description | Minimum Required Access | Non-Volatile? | Run Time
: Behavior
: ____________________________________________________________________________
: __
: Code |Execute-Only |Yes |Fixed/Static
: Constants |Read-Only |Yes |Fixed/Static
: Initialized Data |Read/Write |Yes |Fixed/Static
: Uninitialized Data |Read/Write |No |Fixed/S

avatar
G*O
11
应该学学编译原理之类的课程。

【在 j******y 的大作中提到】
: 真及时,本来我也有这个疑问的。
: char* str="12345"; "12345"字符串不是在stack里面的,不能修改的。
: 那"12345"是存在哪里的?我觉得是静态内存里,不知道对不对。
: 如果函数foo的返回类型是char*, 那函数结尾return str;应该可以合法返回"12345"
: 罗?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。