【发布时间】:2016-01-20 07:37:50
【问题描述】:
通常是一个基本问题,但也许我太愚蠢了。我尝试将char * 作为输出传递给函数的参数。在函数内部,我创建了一个临时的char *,我想将它memcpy 发送到我传递的地址。代码如下:
#define BLOCKSIZE=1024
int myFunction(char *s, char **out) {
int i = strlen(s);
*out = (char *)malloc(BLOCKSIZE);
char tmp[BLOCKSIZE];
strcpy(tmp, s);
tmp[++i] = 0x0f;
for(int i=strlen(s);i < BLOCKSIZE; i++) {
tmp[i] = 0xcc;
}
memcpy(*out, tmp, BLOCKSIZE);
return 0;
}
int main() {
char *s = "Hello World";
char *o = (char *)malloc(BLOCKSIZE);
myFunction(s, &o);
}
问题是,堆栈在跳出函数myFunction..后损坏了。
还有其他方法吗?
提前谢谢你!
最好的,
更新:问题已解决
for循环部分i < BLOCKSIZE必须改为i < (BLOCKSIZE - 1)。
【问题讨论】:
-
你确定C++标签吗?这看起来像 C。在 C++ 中,这要容易得多。
-
毫无意义。有了
std::string,所有这些麻烦都根本不存在。或者它是一个标签错误,你正在做 C 编程?那么请编辑标签。 -
您的代码示例是假的。
tmp[++i] = 0x0f;i此时未声明。 -
除了你的程序有一些已经被别人指出的严重缺陷之外,你如何确定堆栈已损坏?
-
两次调用
malloc导致内存泄漏
标签: c char stack parameter-passing