关于可变参函数的一点问题

DMJZ 2014-06-11 08:29:18
正在研究可变参函数的使用,现在出现了中断,我想知道是哪里错了

menuchoose::menuchoose(int MenuNumber, string MenuInfo, ...) :Number(MenuNumber)
{
va_list arg_ptr;
va_start(arg_ptr, MenuInfo);
while (MenuNumber--)
{
StringVector.push_back(va_arg(arg_ptr, string));
}
va_end(arg_ptr);
}


中断的位置是push_back,这一段用的完全是库函数,所以应该跟自己的代码无关吧?
...全文
220 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankhb1989_tadie 2014-07-03
  • 打赏
  • 举报
回复
就你自己抽风,拉不出屎能怪地球引力不够吗?
引用 18 楼 FrankHB1989 的回复:
发贴框又抽风了么。。。
DMJZ 2014-06-26
  • 打赏
  • 举报
回复
楼上一群大神讨论的我完全看不懂,还是把帖子结了吧
FrankHB1989 2014-06-20
  • 打赏
  • 举报
回复
发贴框又抽风了么。。。
FrankHB1989 2014-06-20
  • 打赏
  • 举报
回复
引用 16 楼 zhao4zhong1 的回复:
[quote=引用 15 楼 FrankHB1989 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] [quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。 [/quote] 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》[/quote] 什么叫对象懂了么。 [/quote] 不懂,给讲讲。 做个可能不太恰当的比喻: 人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。 人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。 [/quote] https://github.com/FrankHB/pl-docs/blob/master/zh-CN/c-cpp-fundamental.md 搜 object 。
引用 16 楼 zhao4zhong1 的回复:
[quote=引用 15 楼 FrankHB1989 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] [quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。 [/quote] 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》[/quote] 什么叫对象懂了么。 [/quote] 不懂,给讲讲。 做个可能不太恰当的比喻: 人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。 人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。 [/quote] https://github.com/FrankHB/pl-docs/blob/master/zh-CN/c-cpp-fundamental.md 搜 object 。
赵4老师 2014-06-20
  • 打赏
  • 举报
回复
引用 15 楼 FrankHB1989 的回复:
[quote=引用 13 楼 zhao4zhong1 的回复:] [quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。 [/quote] 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》[/quote] 什么叫对象懂了么。 [/quote] 不懂,给讲讲。 做个可能不太恰当的比喻: 人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。 人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。
FrankHB1989 2014-06-20
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
[quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。 [/quote] 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》[/quote] 什么叫对象懂了么。
ri_aje 2014-06-18
  • 打赏
  • 举报
回复
variadic template
赵4老师 2014-06-18
  • 打赏
  • 举报
回复
引用 12 楼 FrankHB1989 的回复:
[quote=引用 10 楼 zhao4zhong1 的回复:] string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。 [/quote] 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
FrankHB1989 2014-06-18
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
谁告诉你不是一段内存的。
DMJZ 2014-06-18
  • 打赏
  • 举报
回复
引用 9 楼 mujiok2003 的回复:
[quote=引用 8 楼 u013316316 的回复:] [quote=引用 7 楼 mujiok2003 的回复:] [quote=引用 6 楼 u013316316 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] [quote=引用 2 楼 u013316316 的回复:] [quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c[/quote] 看了看,依然不明觉厉…… 中心思想是应该放弃可变参数而用数组吗?[/quote] 中心思想是不要使用non-pod, 比如std::string[/quote] 原来这样。。。 那我5L的问题有什么资料可以看吗? 我查了一下,参数列表也没有强制性的限制啊,就算是约定俗成的限制,我改成6个的时候它依然出错了[/quote] 出啥错?[/quote] 不知道具体的错误是什么,看起来好像就是内存越界的问题
赵4老师 2014-06-12
  • 打赏
  • 举报
回复
string是对象,不是一段内存,更不是一个指针,不适合当函数的可变参数传递。
mujiok2003 2014-06-12
  • 打赏
  • 举报
回复
引用 8 楼 u013316316 的回复:
[quote=引用 7 楼 mujiok2003 的回复:] [quote=引用 6 楼 u013316316 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] [quote=引用 2 楼 u013316316 的回复:] [quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c[/quote] 看了看,依然不明觉厉…… 中心思想是应该放弃可变参数而用数组吗?[/quote] 中心思想是不要使用non-pod, 比如std::string[/quote] 原来这样。。。 那我5L的问题有什么资料可以看吗? 我查了一下,参数列表也没有强制性的限制啊,就算是约定俗成的限制,我改成6个的时候它依然出错了[/quote] 出啥错?
DMJZ 2014-06-11
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
[quote=引用 6 楼 u013316316 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] [quote=引用 2 楼 u013316316 的回复:] [quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c[/quote] 看了看,依然不明觉厉…… 中心思想是应该放弃可变参数而用数组吗?[/quote] 中心思想是不要使用non-pod, 比如std::string[/quote] 原来这样。。。 那我5L的问题有什么资料可以看吗? 我查了一下,参数列表也没有强制性的限制啊,就算是约定俗成的限制,我改成6个的时候它依然出错了
mujiok2003 2014-06-11
  • 打赏
  • 举报
回复
引用 6 楼 u013316316 的回复:
[quote=引用 4 楼 mujiok2003 的回复:] [quote=引用 2 楼 u013316316 的回复:] [quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c[/quote] 看了看,依然不明觉厉…… 中心思想是应该放弃可变参数而用数组吗?[/quote] 中心思想是不要使用non-pod, 比如std::string
DMJZ 2014-06-11
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
[quote=引用 2 楼 u013316316 的回复:] [quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c[/quote] 看了看,依然不明觉厉…… 中心思想是应该放弃可变参数而用数组吗?
DMJZ 2014-06-11
  • 打赏
  • 举报
回复
引用 3 楼 zhuyf87 的回复:
string改成const char *试试呢。
改了,但是现在出了另一个问题,当我只有两个const char* 参数的时候函数没有问题,但是如果我传8个它会在最后一个出错,如果我传6个它也是在最后一个出错……前面的Number参数没有问题
mujiok2003 2014-06-11
  • 打赏
  • 举报
回复
引用 2 楼 u013316316 的回复:
[quote=引用 1 楼 taodm 的回复:] 用不定参数传string等类,啥都不说了。
。。。这是什么原理?[/quote] http://forums.codeguru.com/showthread.php?292052-Variable-argument-list-in-c
zhuyf87 2014-06-11
  • 打赏
  • 举报
回复
string改成const char *试试呢。
DMJZ 2014-06-11
  • 打赏
  • 举报
回复
引用 1 楼 taodm 的回复:
用不定参数传string等类,啥都不说了。
。。。这是什么原理?
taodm 2014-06-11
  • 打赏
  • 举报
回复
用不定参数传string等类,啥都不说了。

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧