2 u010365595 u010365595 于 2014.10.10 21:43 提问

memset 指针传递问题

void myalloc(char x,int n)
{
x = (char
)malloc(n*sizeof(char));
memset(x,0,n*sizeof(char))
}
int main()
{
char *g="String";
myalloc(g,20);
cout<<g<<endl;//输出为什么还是"String"?

}
memset之后为什么g依旧输出为string?而没有初始化

1个回答

u010136832
u010136832   2014.10.11 09:06

很显然啊,第一个问题:值传递还是址传递的问题,你用的是值传递,你传进去的是g这个指针而已,所以说你改变指针根本没有对指针指向的空间进行改变,解决办法就是传地址,传指针的地址,第二个问题,你的函数myalloc 的第一个参数的类型是char 类型的,但是系统函数malloc 返回的是void * 类型的指针,你确定你编译可以通过。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于memset函数的需要注意的问题
最近用到了memset函数,但是忽略了一点:memset函数的写入是按字节写入的。以下为自己犯错的地方: int *a = new int [100]; memset(a, 10, sizeof(int)*100); for(int i=0;i<100;i++) cout 输出的结果如下: 原因:memset的内存写入是按照字节来进行的,是按照字节为单位进行写入的。该例子中,
关于C语言的memset容易出现的问题
今晚一个关于metset的问题一直调试不出来。部分代码如下:const unsigned int unmarked = 10000; int* diag_map = (int*)malloc(sizeof(int)*(num_rows+num_cols)); memset(diag_map,unmarked,sizeof(int)*(num_rows+num_cols)); for(i=0;i<n
memset函数越界分析
一、memset()函数原型     将buffer所指向的某一块内存中的前count个字节的内容全部设置为c指定的ASCII值 extern void *memset(void *buffer, int c, int count) { const unsigned char uc = c; unsigned char *su; for(
memset赋值问题
http://www.cnblogs.com/caidaxia/archive/2011/11/21/2257241.html 关于memset的用法, 常用于对于较大的结构体或数组进行清零操作//注意,是清零操作,如果进行统一赋值,要谨慎。 void *memset(    void *dest,    int c, size_t count ); 函数将dest所指向
C语言中如何避免memset的坑
有时候写代码的时候,总觉得程序写的没问题,但是总是出错,找了半天的bug,原来是memset()的用法没用对。。。说到底还是太渣了,为了以防以后再翻这种错,特地去查了一下资料和度娘,有种恍然大悟的感觉。。。 void *memset( void *buffer, int ch, size_t count ); memset()的头文件是#include<string.h> 我们经常使用mems
memset效率测试
刚刚AC了一题,需要将数组部分初始化为零,为了简单我就用memset将整个数组置零了,在我印象中memset函数的速度是快得惊人的,没想到居然超时了,让我不得不重新审视memset的效率和我那想当然的愚昧。     初始化部分如下:#include #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; ch
memset的坑
【起因】希望对各种类型的数组进行初始化,避免野值       【函数头文件】 提示:在linux中可以在terminal中输入 "man memset"进行查询         #include         void *memset(void *s, int c, size_t n);       【使用说明】 The  memset()  function  fills  the
系统性能调优经验
在开发对外提供服务的模块的时候,系统的性能经常会是令我们头疼的问题,具体系统性能的定义与瓶颈的定位方法,可以参考陈皓的这篇文章: 性能调优攻略http://coolshell.cn/articles/7490.html 大牛的这篇文章还是很全面的。 下面我会以我们的一些工程经验和曾经遇到过的问题,来实例化一些系统性能调优的经验。   Ø  代码级别 1.       减少数据copy
Linux下memset大内存时报错(地址越界)
我在Linux下开发时,要申请一块3M左右的内存来存放图片的二进制数据,一开始这样写: int size =800*600*4; uchar data[size]; memset(data, 0, size); 运行程式时,在memset时报错,程序终止。后网上查,发现是内存溢出的问题: 因为memset是申请分配在栈上,而linux系统一个线程(你运行程序的线程
不当使用memset函数带来的麻烦问题
<br />      通常在C的编程中,我们经常使用memset函数将一块连续的内存区域清零或设置为其它指定的值,最近在移植一段java代码到C++的时候,不当使用memset函数花费了我几个小时的调试时间。考试大提示: 对于虚函数的底层机制很多资料都有较详细阐述,这次的调试感触颇深。<br />  先来看一段代码,在继承的类Advance之中,有很多属性字段,Examda希望将其清成0或NULL,于是在构造函数中Examda通过memset将当前类的所有属性置0。<br />  class Base{<