How to create TranslationUnit for source code?

I write program which determines type of instance under cursor in source code. I pass on ast-file and cursor location as cmd arguments and output instance location(line number and column) and its type.

#include <stdio.h>
#include <stdlib.h>
#include <clang-c/Index.h>
int main(int argc, char *argv[])
CXIndex index;
CXTranslationUnit tu;
CXFile file;
CXSourceLocation loc;
CXCursor cursor, def;
CXType type;
CXString typesp;
const char types;
index = clang_createIndex(0, 0);
// tu = clang_createTranslationUnitFromSourceFile(index, argv[1],
// 0, NULL, 0, NULL);
tu = clang_createTranslationUnit(index, argv[1]);
file = clang_getFile(tu, argv[1]);
loc = clang_getLocation(tu, file, atoi(argv[2]), atoi(argv[3]));
cursor = clang_getCursor(tu, loc);
Cursor location check */
CXSourceLocation testloc;
testloc = clang_getCursorLocation(cursor);
unsigned lnum, colnum;
clang_getFileLocation(testloc, NULL, &lnum, &colnum, NULL);
printf("%d %d\n", lnum, colnum);
if (clang_isPreprocessing(cursor.kind))
else {
def = clang_getCursorDefinition(cursor);
if (clang_Cursor_isNull(def))
type = clang_getCursorType(cursor);
type = clang_getCursorType(def);
typesp = clang_getTypeSpelling(type);
types = clang_getCString(typesp);
printf("%s\n", types);

I don’t want to generate ast file for source file before program starts. I can use clang_createTranslationUnitFromSourceFile() and clang_reparseTranslationUnit instead of clang_createTranslationUnit(). But problem is TranslationUnits which I will get with this functions is some kind of wrong. So I can’t get appropriate Cursor for 7, 10 (line, column) position when force program process its own source code.

When I apply program to itself source code with 16 (line) and 3 (column) parameters which correspond

index = clang_createIndex(0, 0);
// ^

it displays 6 (line) and 1 (column) which corresponds

int main(int argc, char *argv[])

It’s wrong. But when apply 29 3 which correspond

printf("%d %d\n", lnum, colnum);

It displays 28 1 and it’s right. Why Cursor is made wrong in first case and how to make it right? Does some way exists to create right TranslationUnit for source code without using clang -emit-ast?