由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个简单的memory allocation 的问题。
相关主题
关于C++中一个Class的大小 (转载)来,出个题
问个char*的问题一个指向指针的指针的引用?
a simple question for C++ class一个古怪的C程序运行错误。
用数组做参数,在函数内部如何知道数组的size?a question about bitwise operation
请大侠评点一下我这个C++多重继承的程序。。。写得对不对啊。g++ default optimization error
我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。为什么有点函数声明的参数类型但是没有变量名呢?
请教个static_cast vs reinterpret_cast的问题。C++ Interview Question
3 c++ challenge-and-grill questions在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
相关话题的讨论汇总
话题: char话题: strcpy话题: endl话题: cout话题: 编译器
进入Programming版参与讨论
1 (共1页)
m******t
发帖数: 4077
1
1, 以下小程序里没有给b allocate space, 为什么编译器不报错呢?g++
2, a[5]到底在内存里面占几个字节?是5个吗?但是最后一个已经给了 '\0', 对吗?
3, a[5]是在stack中还是在heap中啊?如果用new 给b分配地址的话是在heap中,对吧?
#include
using namespace std;
int main()
{
char * b;
char a[5] = "1234";
strcpy(b, a);
cout << a < cout << b << endl;
cout << "size of b " << sizeof(b)< cout << "size of a " << sizeof(a)< return 0;
}
e*****w
发帖数: 144
2
符合C++语法,编译器为啥要报错?

吧?

【在 m******t 的大作中提到】
: 1, 以下小程序里没有给b allocate space, 为什么编译器不报错呢?g++
: 2, a[5]到底在内存里面占几个字节?是5个吗?但是最后一个已经给了 '\0', 对吗?
: 3, a[5]是在stack中还是在heap中啊?如果用new 给b分配地址的话是在heap中,对吧?
: #include
: using namespace std;
: int main()
: {
: char * b;
: char a[5] = "1234";
: strcpy(b, a);

m******t
发帖数: 4077
3
就是说不需要给b 分配内存了, 那么数据是在哪里呢? after strcpy? 在b指向的地
址连续5个byte吗?这样不是很可能把其他的内容overwritten了吗?

【在 e*****w 的大作中提到】
: 符合C++语法,编译器为啥要报错?
:
: 吧?

t******c
发帖数: 348
4
simple implementation of strcpy is like this:
char *strcpy(char *dest, const char *src)
{
const char *p;
char *q;
for(p = src, q = dest; *p != '\0'; p++, q++)
*q = *p;
*q = '\0';
return dest;
}

【在 m******t 的大作中提到】
: 就是说不需要给b 分配内存了, 那么数据是在哪里呢? after strcpy? 在b指向的地
: 址连续5个byte吗?这样不是很可能把其他的内容overwritten了吗?

k****n
发帖数: 1334
5
你在说什么?
b没有分配空间,怎么能够strcpy

【在 t******c 的大作中提到】
: simple implementation of strcpy is like this:
: char *strcpy(char *dest, const char *src)
: {
: const char *p;
: char *q;
: for(p = src, q = dest; *p != '\0'; p++, q++)
: *q = *p;
: *q = '\0';
: return dest;
: }

m******t
发帖数: 4077
6
是可以的,如果a很小的话,比如说5个byte,但是改到500000的话,就会出错。
所以我特别的confuse.

【在 k****n 的大作中提到】
: 你在说什么?
: b没有分配空间,怎么能够strcpy

a***f
发帖数: 45
7
这个应该是runtime error吧,编译器只管语法,而语法没什么问题吧。当然在有些情况下,编译器可能会给出警告。
t****t
发帖数: 6806
8
C语言零分,回去重修

【在 t******c 的大作中提到】
: simple implementation of strcpy is like this:
: char *strcpy(char *dest, const char *src)
: {
: const char *p;
: char *q;
: for(p = src, q = dest; *p != '\0'; p++, q++)
: *q = *p;
: *q = '\0';
: return dest;
: }

t****t
发帖数: 6806
9
你也是

【在 m******t 的大作中提到】
: 是可以的,如果a很小的话,比如说5个byte,但是改到500000的话,就会出错。
: 所以我特别的confuse.

k****f
发帖数: 3794
10
haha,不要这么鄙视new cop

【在 t****t 的大作中提到】
: 你也是
相关主题
我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。来,出个题
请教个static_cast vs reinterpret_cast的问题。一个指向指针的指针的引用?
3 c++ challenge-and-grill questions一个古怪的C程序运行错误。
进入Programming版参与讨论
t******c
发帖数: 348
11
OK...
没有给指针分配空间就做strcpy是错误的.

【在 t****t 的大作中提到】
: C语言零分,回去重修
S*****n
发帖数: 227
12
您这个strcpy的实现简直就是给hacker打开了系统的大门啊。

【在 t******c 的大作中提到】
: simple implementation of strcpy is like this:
: char *strcpy(char *dest, const char *src)
: {
: const char *p;
: char *q;
: for(p = src, q = dest; *p != '\0'; p++, q++)
: *q = *p;
: *q = '\0';
: return dest;
: }

m******t
发帖数: 4077
13
我是new cop, 大牛给详细讲解一下?看我的第一个贴?
g++ 编译确实是没有问题的,运行也没有问题,但是这个应该是错的,我也知道。

【在 t****t 的大作中提到】
: 你也是
t****t
发帖数: 6806
14
编译通过+运行通过 != 没错

【在 m******t 的大作中提到】
: 我是new cop, 大牛给详细讲解一下?看我的第一个贴?
: g++ 编译确实是没有问题的,运行也没有问题,但是这个应该是错的,我也知道。

m******t
发帖数: 4077
15
我再补充一下,在linux下用g++编译没错,但是run time error, segmentation error
, 这样就reasonable了。
但是我在windows下用codeblocks 编译运行都没有问题。也是g++的编译器。
这个为什么?

【在 m******t 的大作中提到】
: 我是new cop, 大牛给详细讲解一下?看我的第一个贴?
: g++ 编译确实是没有问题的,运行也没有问题,但是这个应该是错的,我也知道。

m******t
发帖数: 4077
16
那位能回答以下第二第三个问题?谢谢?

吧?

【在 m******t 的大作中提到】
: 1, 以下小程序里没有给b allocate space, 为什么编译器不报错呢?g++
: 2, a[5]到底在内存里面占几个字节?是5个吗?但是最后一个已经给了 '\0', 对吗?
: 3, a[5]是在stack中还是在heap中啊?如果用new 给b分配地址的话是在heap中,对吧?
: #include
: using namespace std;
: int main()
: {
: char * b;
: char a[5] = "1234";
: strcpy(b, a);

k****n
发帖数: 1334
17
你那是一个明显的bug
但是bug不必在所有情况下出现

error

【在 m******t 的大作中提到】
: 我再补充一下,在linux下用g++编译没错,但是run time error, segmentation error
: , 这样就reasonable了。
: 但是我在windows下用codeblocks 编译运行都没有问题。也是g++的编译器。
: 这个为什么?

d*******d
发帖数: 2050
18
1.符合语法,编译器不报错。但是,b可能指向任意地址,结果是,你把1234写到
一个可能不该写的地方。
2.a[5],是5个byte.最后一个给了\0
3.对

吧?

【在 m******t 的大作中提到】
: 1, 以下小程序里没有给b allocate space, 为什么编译器不报错呢?g++
: 2, a[5]到底在内存里面占几个字节?是5个吗?但是最后一个已经给了 '\0', 对吗?
: 3, a[5]是在stack中还是在heap中啊?如果用new 给b分配地址的话是在heap中,对吧?
: #include
: using namespace std;
: int main()
: {
: char * b;
: char a[5] = "1234";
: strcpy(b, a);

c********x
发帖数: 84
19
variable b is uninitialized.
c********x
发帖数: 84
20
variable b is uninitialized.
1 (共1页)
进入Programming版参与讨论
相关主题
在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)请大侠评点一下我这个C++多重继承的程序。。。写得对不对啊。
问个c语言的问题我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
数组定义的时候,分配空间了么?请教个static_cast vs reinterpret_cast的问题。
含泪流血裸奔完整代码回答C++弱问题3 c++ challenge-and-grill questions
关于C++中一个Class的大小 (转载)来,出个题
问个char*的问题一个指向指针的指针的引用?
a simple question for C++ class一个古怪的C程序运行错误。
用数组做参数,在函数内部如何知道数组的size?a question about bitwise operation
相关话题的讨论汇总
话题: char话题: strcpy话题: endl话题: cout话题: 编译器