好的...所以我认为有人会为您的堆栈溢出问题提供答案,但到目前为止,每个人都只提到了您实际遇到的一个与堆栈溢出无关的问题(稍后会详细介绍)(这将是有问题的,但只有一次你先解决这个问题)。
-----------------
| Your stack |
| (grows down) |
| |
-----------------
| |
| |
| |
| |
| |
| | -- max stack size is here
| |
| |
| |
| |
| |
-----------------
| Your heap |
| (grows up) |
| |
-----------------
然后你尝试分配一堆非常大的数组并用完空间
-----------------
| Your stack |
| (grows down) |
| |
| |
| |
| |
| |
| |
| |
| | -- max stack size is here
| |
----------------- -- what you actually need
| |
| |
| |
| |
-----------------
| Your heap |
| (grows up) |
| |
-----------------
所以你得到一个运行时错误(堆栈溢出),因为你试图使用比你可用的更多的堆栈空间。
这里的技巧是使用堆分配(因为在大多数平台上,至少我听说过的所有平台上)堆比堆栈大得多。
在你使用的堆上分配内存malloc
(另外,当你完成它时不要忘记使用释放内存free
,否则你会泄漏内存)。
编辑:奖金:您遇到的另一个问题。其他答案似乎表明您正在访问/取消引用/使用未分配的内存。在这一点上,您实际上部分很好。
你 scanf 调用指向一个 char 数组(这是问题所在)和数组 k 中的一个 int (没问题。所以现在选项数组中的所有条目都指向无处/无处。你需要为它们分配内存(再次使用malloc
)。
至于strdup,它自己分配内存并返回指针,这里也没有问题。只是不要忘记在使用完之后释放它,因为这又会导致内存泄漏。