首页 > 解决方案 > 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;
}

标签: c++pointersvector

解决方案


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]);
}

推荐阅读