c++ - free():使用 scanf 时指针无效
问题描述
大家好,这是我的代码。我不能使用 cin 和 getline() 所以我不得不使用 scanf。它按预期读取所有值,但在输入最后一个值后它说:
free(): 无效指针 ./comp: 第 8 行: 877 Aborted (core dumped) ./$BIN
无论如何,这是代码。帮助将不胜感激。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
// n -> amount of lines of code.
// q -> amount of queries.
int n, q;
cin >> n >> q;
// Handle source code Input.
vector<string> v(n);
for (unsigned i = 0; i < n; ++i)
{
cout << "i: " << i << endl;
scanf("%s", &v[i]);
}
return 0;
}
解决方案
scanf
旨在使用字符缓冲区,而不是字符串。您可能想要使用std::string
(它更直观并为您管理内存),因此scanf
不适合。有一个版本getline
适用于string
.
std::vector<std::string> v(n);
for (int i = 0; i < n; i++) {
cout << "i: " << i << endl;
std::getline(std::cin, v[i]);
}
推荐阅读
- python - 我想根据我的演讲刷新我的报告是否可以在 Power BI 中使用?
- java - Java 中的 Nats 请求/回复
- typescript - Apollo、Express、WS 会话未共享
- selenium - Selenium webdriver连接超时后如何清理等待请求
- java - h2o.xgboost 训练错误 java.lang.NullPointerException h2o 版本:3.26.0.2
- discord.js - 如何通过我自己的机器人使用音乐不和谐机器人
- vba - 使用定义的函数执行直到
- phabricator - 在 Phabricator 中实现甘特图
- java - 使用 spring @Scheduled 的问题
- javascript - 在比较字符串中使用变量